Esempio n. 1
0
void multimap_init_copy(multimap_t* pt_multimapdest, const multimap_t* cpt_multimapsrc)
{
    assert(pt_multimapdest != NULL && cpt_multimapsrc != NULL);
    assert(
        pt_multimapdest->_t_pair._t_firsttypesize == 
            cpt_multimapsrc->_t_pair._t_firsttypesize &&
        pt_multimapdest->_t_pair._t_secondtypesize ==
            cpt_multimapsrc->_t_pair._t_secondtypesize);
    assert(
        strncmp(
            pt_multimapdest->_t_pair._sz_firsttypename,
            cpt_multimapsrc->_t_pair._sz_firsttypename,
            _ELEM_TYPE_NAME_SIZE) == 0 &&
        strncmp(
            pt_multimapdest->_t_pair._sz_secondtypename,
            cpt_multimapsrc->_t_pair._sz_secondtypename,
            _ELEM_TYPE_NAME_SIZE) == 0);

    /* initialize dest multimap with src multimap attribute */
    multimap_init(pt_multimapdest);
    /* insert all element from src to dest */
    if(!multimap_empty(cpt_multimapsrc))
    {
        multimap_insert_range(
            pt_multimapdest, 
            multimap_begin(cpt_multimapsrc), 
            multimap_end(cpt_multimapsrc));
    }
}
Esempio n. 2
0
void multimap_assign(multimap_t* pt_multimapdest, const multimap_t* cpt_multimapsrc)
{
    assert(pt_multimapdest != NULL && cpt_multimapsrc != NULL);
    assert(
        _same_multimap_pair_type(
            &pt_multimapdest->_t_pair, &cpt_multimapsrc->_t_pair));

    /* destroy dest multimap */
    multimap_destroy(pt_multimapdest);
    /* initialize dest multimap with src multimap attribute */
    multimap_init(pt_multimapdest);
    /* insert all element from src to dest */
    if(!multimap_empty(cpt_multimapsrc))
    {
        multimap_insert_range(
            pt_multimapdest, 
            multimap_begin(cpt_multimapsrc), 
            multimap_end(cpt_multimapsrc));
    }
}
Esempio n. 3
0
void _attribute_sort_items_(container **X, enum attr_sort_enum sort, char sort_reverse)
{
    if (*X == NULL) return;

    int		i, j;
    container	*N = NULL;

    /*
    printf("sort: ");
    switch (sort)
    {
	case sort_none: printf("sort_none"); break;
	case sort_hits: printf("sort_hits"); break;
	case sort_alpha: printf("sort_alpha"); break;
    }
    if (sort_reverse) printf(" (reverse)");
    printf("\n");

    for (i=0; i<vector_size(*X); i++)
	{
	    struct _attr_tree_	*item = vector_get(*X, i).ptr;
	    printf("  %.8x name:%s hits:%i\n", (int)X, item->name, item->hits);
	}
    */

    if (sort == sort_hits) N = multimap_container( int_container(), ptr_container() );
    else if (sort == sort_alpha) N = multimap_container( string_container(), ptr_container() );

    for (i=0; i<vector_size(*X); i++)
	{
	    struct _attr_tree_	*item = vector_get(*X, i).ptr;

	    if (item->children != NULL)
		_attribute_sort_items_(&(item->children), item->sort, item->sort_reverse);

	    if (sort == sort_hits) multimap_insert(N, item->hits, item);
	    else if (sort == sort_alpha)
		{
		    if (item->name!=NULL) multimap_insert(N, item->name, item);
		    else if (item->value!=NULL) multimap_insert(N, item->name, item);
		    else if (item->name!=NULL) multimap_insert(N, item->name, item);
		    else multimap_insert(N, item->name, item);
		}
	}

    if (!sort_reverse && sort != sort_hits && sort != sort_alpha) return;

    container	*Y = vector_container( ptr_container() );
    iterator	it;

    if ((sort == sort_hits && sort_reverse) || (sort == sort_alpha && !sort_reverse))
	{
	    it = multimap_begin(N);
	    for (; it.valid; it=multimap_next(it))
		vector_pushback(Y, map_val(it).ptr);
	}
    else
	{
	    if (sort != sort_hits && sort != sort_alpha)
		{
		    for (i=vector_size(*X)-1; i>=0; i--)
			vector_pushback(Y, vector_get(*X, i).ptr);
		}
	    else
		{
		    it = multimap_end(N);
		    for (; it.valid; it=multimap_previous(it))
			vector_pushback(Y, map_val(it).ptr);
		}
	}

    if (N != NULL) destroy(N);
    destroy(*X);
    *X = Y;

    /*
    for (i=0; i<vector_size(*X); i++)
	{
	    struct _attr_tree_	*item = vector_get(*X, i).ptr;
	    printf("  %.8x name:%s hits:%i\n", (int)X, item->name, item->hits);
	}
    */

    return;
}