Esempio n. 1
0
void *ListDeleteNode(ListNode *Node)
{
ListNode *Head, *Prev, *Next;
void *Contents;

if (Node==NULL)
{
 return(NULL);
}

Head=ListGetHead(Node);
Prev=Node->Prev;
Next=Node->Next;
if (Prev !=NULL) Prev->Next=Next;
if (Next !=NULL) Next->Prev=Prev;
if (Head->Next==Node) Head->Next=Next;
if (Head->Prev==Node) Head->Prev=Prev;

Contents=Node->Item;

ListDecrNoOfItems(Node);
DestroyString(Node->Tag);
free(Node);
return(Contents);
}
Esempio n. 2
0
void ListUnThreadNode(ListNode *Node)
{
    ListNode *Head, *Prev, *Next;

    ListDecrNoOfItems(Node);
    Prev=Node->Prev;
    Next=Node->Next;
    if (Prev !=NULL) Prev->Next=Next;
    if (Next !=NULL) Next->Prev=Prev;

    Head=ListGetHead(Node);
    if (Head)
    {
//prev node of head points to LAST item in list
        if (Head->Prev==Node)
        {
            Head->Prev=Node->Prev;
            if (Head->Prev==Head) Head->Prev=NULL;
        }

        if (Head->Side==Node) Head->Side=NULL;
        if (Head->Next==Node) Head->Next=Next;
        if (Head->Prev==Node) Head->Prev=Prev;
    }

		//make our unthreaded node a singleton
    Node->Head=NULL;
    Node->Prev=NULL;
    Node->Next=NULL;
    Node->Side=NULL;
}
Esempio n. 3
0
void *ListDeleteNode(ListNode *Node)
{
ListNode *Prev, *Next, *Curr;
void *Contents;
int result;

if (Node==NULL)
{
 return(NULL);
}

Curr=Node->Head;
if (Curr) Curr=Curr->Next;
while (Curr)
{
if (Curr->Jump)
{
	if (Curr->Jump==Node) Curr->Jump=NULL;
}

Curr=ListGetNext(Curr);
}

Prev=Node->Prev;
Next=Node->Next;
if (Prev !=NULL) Prev->Next=Next;
if (Next !=NULL) Next->Prev=Prev;


Contents=Node->Item;

ListDecrNoOfItems(Node);
DestroyString(Node->Tag);
free(Node);
return(Contents);
}