32 header->GetLinks = getLinks;
47 (*getLinks)(atom)->Next = header->First;
48 (*getLinks)(atom)->Prev =
NULL;
52 if (header->First !=
NULL)
53 (*getLinks)(header->First)->Prev = atom;
71 if (header->Last !=
NULL)
72 (*getLinks)(header->Last)->Next = atom;
79 (*getLinks)(atom)->Prev = header->Last;
80 (*getLinks)(atom)->Next =
NULL;
98 (*getLinks)(atom)->Next = mark;
100 if (mark != header->First)
102 (*getLinks)(atom)->Prev = (*getLinks)(mark)->Prev;
103 (*getLinks)((*getLinks)(mark)->Prev)->
Next = atom;
107 (*getLinks)(atom)->Prev =
NULL;
108 header->First = atom;
111 (*getLinks)(mark)->Prev = atom;
127 if (header->Lock > 1)
128 OS_PrintMessage (
"List_InsertAfter: Warning insert after on recursive List_Enum call !!\n");
133 (*getLinks)(atom)->Prev = mark;
135 if (mark != header->Last)
137 (*getLinks)(atom)->Next = (*getLinks)(mark)->Next;
138 (*getLinks)((*getLinks)(mark)->Next)->Prev = atom;
142 (*getLinks)(atom)->Next =
NULL;
146 (*getLinks)(mark)->Next = atom;
163 if ((*getLinks)(first)->Next != second)
166 OS_PrintMessage (
"List_Swap: WARNING wrong input data, swap not done..\n");
173 if (header->First == first)
174 header->First = second;
176 (*getLinks)((*getLinks)(first)->Prev)->Next = second;
178 if (header->Last == second)
179 header->Last = first;
181 (*getLinks)((*getLinks)(second)->Next)->Prev = first;
185 (*getLinks)(second)->Prev = (*getLinks)(first)->Prev;
186 (*getLinks)(first)->Next = (*getLinks)(second)->Next;
187 (*getLinks)(first)->Prev = second;
188 (*getLinks)(second)->Next = first;
199 save = (*header->GetLinks)(atom)->Next;
200 (*header->GetLinks)(atom)->Next = (*header->GetLinks)(atom)->Prev;
201 (*header->GetLinks)(atom)->Prev = save;
217 header->First = header->Last;
222 next = (*getLinks)(cur)->Next;
245 if (header->Lock > 1)
246 OS_PrintMessage (
"List_Remove: Warning remove on recursive List_Enum call !!\n");
251 if ((*getLinks)(atom)->Prev !=
NULL)
253 (*getLinks)((*getLinks)(atom)->Prev)->Next =
254 (*getLinks)(atom)->Next;
257 header->First = (*getLinks)(atom)->Next;
261 if ((*getLinks)(atom)->Next !=
NULL)
263 (*getLinks)((*getLinks)(atom)->Next)->Prev =
264 (*getLinks)(atom)->Prev;
267 header->Last = (*getLinks)(atom)->Prev;
271 (*getLinks)(atom)->Prev =
NULL;
272 (*getLinks)(atom)->Next =
NULL;
283 if (header1->GetLinks == header2->
GetLinks)
286 OS_PrintMessage (
"List_Concat: ERROR concat different lists\n");
297 if (header1->First ==
NULL)
298 header1->First = header2->
First;
302 (*getLinks)(header1->Last)->Next = header2->
First;
303 (*getLinks)(header2->
First)->Prev = header1->Last;
305 header1->Last = header2->
Last;
318 int notInterrupted =
TRUE;
325 while (cur !=
NULL && notInterrupted)
328 notInterrupted = (*proc)(cur, closure);
336 return (notInterrupted);
354 return (
List_EnumFrom (header, header->First, proc, closure));
366 int notInterrupted =
TRUE;
373 while (cur !=
NULL && notInterrupted)
376 notInterrupted = (*proc)(cur, closure);
384 return (notInterrupted);
404 long *nb = (
long *)nbR;
424 return (links->Next ==
NULL && links->Prev ==
NULL);
439 newHeader->
Last = header->Last;
444 (*getLinks)(atom)->Next =
NULL;
445 (*getLinks)(newHeader->
First)->Prev =
NULL;
long List_EnumBackFrom(RefListHeader header, Ref atom, RefListEnumProc proc, Ref closure)
void List_Concat(RefListHeader header1, RefListHeader header2)
void List_Swap(RefListHeader header, Ref first, Ref second)
long List_IsUnlink(RefListLinks links)
void List_InsertAfter(RefListHeader header, Ref atom, Ref mark)
#define List_Prev(header, RefAtom)
void List_InsertBefore(RefListHeader header, Ref atom, Ref mark)
void List_Cut(RefListHeader header, Ref atom, RefListHeader newHeader)
static long List_SwapLinks(RefListHeader header, Ref atom)
void List_Reverse(RefListHeader header)
RefListLinks(* RefListGetLinksProc)()
void List_InsertAhead(RefListHeader header, Ref atom)
#define List_Next(header, RefAtom)
long List_Card(RefListHeader header)
#define List_Last(header)
void List_SetLinkProc(RefListHeader header, RefListGetLinksProc getLinks)
long List_EnumFrom(RefListHeader header, Ref atom, RefListEnumProc proc, Ref closure)
void List_Append(RefListHeader header, Ref atom)
static long List_CountAtom(Ref p, Ref nbR)
long List_EnumBack(RefListHeader header, RefListEnumProc proc, Ref closure)
long List_Enum(RefListHeader header, RefListEnumProc proc, Ref closure)
void List_Remove(RefListHeader header, Ref atom)