Beispiel #1
0
inline container* map_clone( container *C )
{
    map_container_priv	*LP = C->priv;
    container		*N = LP->Key->clone(LP->Key),
                     *M = LP->Data->clone(LP->Data);
    return map_container(N,M);
}
void va_attribute_count_add( int size, int count, container *attributes, int argc, va_list *ap )
{
    ant[0]++;
    int		i;
    char	*id = va_arg(*ap, char*);
    container	*subattr;

    iterator	it = map_find(attributes, id);
    if (it.valid)
	{
	    ant[1]++;
	    subattr = pair(map_val(it)).first.ptr;

	    container	*M = pair(map_val(it)).second.ptr;
	    it = map_find(M, count);
	    if (it.valid)
		{
		    ant[2]++;
		    map_val(it).i+= size;
		}
	    else
		{
		    ant[3]++;
		    map_insert(M, count, size);
		}
	    //for (i=0; i<len; i++)
		//((int*)pair(map_val(it)).second.ptr)[i]+= count[i];
	}
    else
	{
	    ant[4]++;
	    subattr = map_container( string_container(), pair_container( ptr_container(), ptr_container() ) );

	    container	*M = map_container( int_container(), int_container() );
	    map_insert(M, count, size);
	    //int		*C = malloc(sizeof(int)*len);
	    //for (i=0; i<len; i++) C[i] = count[i];
	    map_insert(attributes, id, subattr, M);
	}

    if (argc > 1) va_attribute_count_add( size, count, subattr, argc-1, ap );
}