示例#1
0
void list_push_front(list_t *l, void *elem)
{
	if(l->capacity == l->size)
	{
		list_double_capacity(l);
	}
	memmove(l->data + l->elem_size, l->data, l->elem_size * l->size);
	memcpy(l->data, elem, l->elem_size);
	l->size++;
}
示例#2
0
void list_push_back(list_t *l,void *elem)
{
	assert(l != NULL && elem != NULL);
	if(l->capacity == l->size)
	{
		list_double_capacity(l);
	}
	memcpy(l->data + l->size * l->elem_size,elem,l->elem_size);
	l->size++;
}
示例#3
0
caValue* list_append(ListData** dataPtr)
{
    if (*dataPtr == NULL) {
        *dataPtr = allocate_empty_list(1);
    } else {
        *dataPtr = list_touch(*dataPtr);
        
        if ((*dataPtr)->count == (*dataPtr)->capacity)
            *dataPtr = list_double_capacity(*dataPtr);
    }

    ListData* data = *dataPtr;
    data->count++;
    return &data->items[data->count - 1];
}
示例#4
0
void  list_insert(list_t *l, int index, void *elem)
{
	if(index < 0 || index >= l->size)
	{
		fprintf(stderr, "index out of bounds %s:%d\n", __FILE__, __LINE__);
		abort();
	}

	if(l->capacity == l->size)
	{
		list_double_capacity(l);
	}
	memmove(l->data + l->elem_size * (index + 1), 
			l->data + l->elem_size * index, 
			l->elem_size * (l->size - index));

	memcpy(l->data + index * l->elem_size, elem, l->elem_size);
	l->size++;
}