Пример #1
0
ListNode *ListInsertNamedItem(ListNode *InsertNode, const char *Name, void *Item)
{
ListNode *NewItem, *Next;

Next=InsertNode->Next;
NewItem=(ListNode *) calloc(1,sizeof(ListNode)); 
NewItem->Item=Item;
NewItem->Prev=InsertNode;
NewItem->Next=Next;
InsertNode->Next=NewItem;
NewItem->Head=InsertNode->Head;
if (Next) Next->Prev=NewItem; /* Next might be NULL! */
ListIncrNoOfItems(NewItem);
if (StrLen(Name)) NewItem->Tag=CopyStr(NewItem->Tag,Name);
return(NewItem);
}
Пример #2
0
ListNode *OrderedListAddNamedItem(ListNode *Head, const char *Name, void *Item)
{
ListNode *NewItem, *Prev;

Prev=ListFindNamedItemInsert(Head, Name);
NewItem=(ListNode *) calloc(1,sizeof(ListNode)); 
NewItem->Item=Item;
NewItem->Prev=Prev;
NewItem->Next=Prev->Next;
Prev->Next=NewItem;
NewItem->Head=Prev->Head;
if (NewItem->Next) NewItem->Next->Prev=NewItem; /* Next might be NULL! */
ListIncrNoOfItems(NewItem);
if (StrLen(Name)) NewItem->Tag=CopyStr(NewItem->Tag,Name);
NewItem->Time=GetTime(TRUE);

return(NewItem);
}
Пример #3
0
ListNode *ListAddNamedItemAfter(ListNode *ListStart,const char *Name,void *Item)
{
ListNode *Curr;

if (ListStart==NULL) return(NULL);

Curr=ListStart;
Curr->Next=(ListNode *) calloc(1,sizeof(ListNode)); 
Curr->Next->Prev=Curr;
Curr=Curr->Next;
Curr->Item=Item;
Curr->Head=ListGetHead(ListStart);
Curr->Next=NULL;
if (Name) Curr->Tag=CopyStr(NULL,Name);

ListIncrNoOfItems(Curr);
return(Curr);
}
Пример #4
0
void ListThreadNode(ListNode *Prev, ListNode *Node)
{
    ListNode *Head, *Next;

//Never thread something to itself!
    if (Prev==Node) return;

    Next=Prev->Next;
    Node->Prev=Prev;
    Prev->Next=Node;
    Node->Next=Next;

    Head=ListGetHead(Prev);
    Node->Head=Head;

// Next might be NULL! If it is, then our new node is last
// item in list, so update Head node accordingly
    if (Next) Next->Prev=Node;
    else Head->Prev=Node;
    ListIncrNoOfItems(Prev);
}
Пример #5
0
ListNode *OrderedListAddNamedItem(ListNode *Head, const char *Name, void *Item)
{
ListNode *NewItem, *Prev, *Curr, *Start;
int count=0, jcount=0, result=-1;


if (! Head) return(NULL);
Prev=Head;
Curr=Head->Next;
Start=Curr;

while (Curr)
{
if (Curr->Jump)
{
	count=0;
	result=strcmp(Curr->Jump->Tag,Name);
	if (result < 0)
	{
		 Curr=Curr->Jump;
		 Prev=Curr->Prev;
		 jcount++;
		if (jcount > 5)
		{
		 OrderedListAddJump(Head->Next, Curr);
		 jcount=0;
		}
	Start=Curr->Next;
	}
}

if (Curr->Tag) result=strcmp(Curr->Tag,Name);
if (result > -1) break;

count++;
if (count > 100)
{
 OrderedListAddJump(Start, Curr);
 count=0;
 Start=Curr->Next;
}

Prev=Curr;
Curr=Curr->Next;
}

NewItem=(ListNode *) calloc(1,sizeof(ListNode)); 
NewItem->Item=Item;
NewItem->Prev=Prev;
NewItem->Next=Prev->Next;
Prev->Next=NewItem;
NewItem->Head=Prev->Head;
if (NewItem->Next) NewItem->Next->Prev=NewItem; /* Next might be NULL! */
ListIncrNoOfItems(NewItem);
if (StrLen(Name)) NewItem->Tag=CopyStr(NewItem->Tag,Name);


result=ListSize(NewItem);

if ((result % 2000)==0)
{
Curr=ListGetNth(Head,result / 2);
OrderedListAddJump(Head->Next, Curr);
}


return(NewItem);
}