Пример #1
0
int DListInsert_Prev(DList *list, DListElmt *element, const void *data)
{
	DListElmt *element_new;
	if (element == NULL &&
		DListSize(list) != 0)
	{
		return -1;
	}
	if ((element_new = (DListElmt*)malloc(sizeof(DListElmt))) == NULL)
	{
		return -1;
	}
	element_new->data = (void*)data;

	if (DListSize(list) == 0)
	{
		list->Head = element_new;
		list->Head->prev = NULL;
		list->Head->next = NULL;
		list->Tail = element_new;
	}
	else
	{
		element_new->next = element;
		element_new->prev = element->prev;
		if (element->prev == NULL)
		{
			list->Head = element_new;
		}
		else
		{
			element->prev->next = element;
		}
		element->prev = element_new;
	}

	list->nSize++;

	return 0;
}
Пример #2
0
void DListDestory(DList *list)
{
	void *data;
	while (0 < DListSize(list))
	{
		if (DListRemove(list, DListTail(list), (void**)&data) == 0 &&
			list->destory != NULL)
		{
			list->destory(data);
		}
	}
	memset(list, 0, sizeof(DList));

	return;
}
Пример #3
0
int DListRemove(DList *list, DListElmt *element, void **data)
{
	if (element == NULL || DListSize(list) == 0)
	{
		return -1;
	}
	*data = element->data;
	if (element == list->Head)
	{
		list->Head = element->next;
		if (list->Head == NULL)
		{
			list->Tail = NULL;
		}
		else
		{
			element->next->prev = NULL;
		}
	}
	else
	{
		element->prev->next = element->next;
		if (element->next == NULL)
		{
			list->Tail = element->prev;
		}
		else
		{
			element->next->prev = element->prev;
		}
	}

	free(element);
	list->nSize--;

	return 0;
}
Пример #4
0
/* Checks if the list is empty. If true returns 1, else - returns 0. */
int DListIsEmpty(const dlist_t *dlist)
{
	return(DListSize(dlist) == 0);
}