Пример #1
0
int arraylist_expand(struct arraylist *array)
{
	size_t old_max = array->max;
	check(arraylist_resize(array, array->max + array->expand_rate) == 0, "Failed to expand array to new size: %d",
		array->max + (int) array->expand_rate);
	memset(array->contents + old_max, 0, array->expand_rate + 1);
	return 0;
error:
	return -1;
}
Пример #2
0
/*
 * adds a copy of the item at itemPtr to the list at position index
 * Adding to the end takes constant time
 * Adding to the beginning takes linear time
 */
void arraylist_add(arraylist *list,int index, void* itemPtr){
	if(index>list->size||index<0) 
		fprintf(stderr,"your index is out of bounds. size:%d index %d\n",list->size,index);
	int elem_size=list->element_size;
	if(list->size==list->capacity){
		arraylist_resize(list);
	}
	void *position=list->array+index*elem_size;
	memmove(position+elem_size,position, elem_size*(list->size-index));
	memcpy(position, itemPtr, elem_size);
	++list->size;
}
Пример #3
0
int arraylist_contract(struct arraylist *array)
{
	int new_size = array->end < (int) array->expand_rate ? (int) array->expand_rate : array->end;
	return arraylist_resize(array, new_size + 1);
}