1*c65ebfc7SToomas Soome /* -*- Mode: C; tab-width: 4 -*- 2*c65ebfc7SToomas Soome * 3*c65ebfc7SToomas Soome * Copyright (c) 2003 Apple Computer, Inc. All rights reserved. 4*c65ebfc7SToomas Soome * 5*c65ebfc7SToomas Soome * Licensed under the Apache License, Version 2.0 (the "License"); 6*c65ebfc7SToomas Soome * you may not use this file except in compliance with the License. 7*c65ebfc7SToomas Soome * You may obtain a copy of the License at 8*c65ebfc7SToomas Soome * 9*c65ebfc7SToomas Soome * http://www.apache.org/licenses/LICENSE-2.0 10*c65ebfc7SToomas Soome * 11*c65ebfc7SToomas Soome * Unless required by applicable law or agreed to in writing, software 12*c65ebfc7SToomas Soome * distributed under the License is distributed on an "AS IS" BASIS, 13*c65ebfc7SToomas Soome * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*c65ebfc7SToomas Soome * See the License for the specific language governing permissions and 15*c65ebfc7SToomas Soome * limitations under the License. 16*c65ebfc7SToomas Soome */ 17*c65ebfc7SToomas Soome 18*c65ebfc7SToomas Soome #ifndef __GenLinkedList__ 19*c65ebfc7SToomas Soome #define __GenLinkedList__ 20*c65ebfc7SToomas Soome 21*c65ebfc7SToomas Soome 22*c65ebfc7SToomas Soome #include <stddef.h> 23*c65ebfc7SToomas Soome 24*c65ebfc7SToomas Soome 25*c65ebfc7SToomas Soome struct GenLinkedList 26*c65ebfc7SToomas Soome { 27*c65ebfc7SToomas Soome void *Head, 28*c65ebfc7SToomas Soome *Tail; 29*c65ebfc7SToomas Soome size_t LinkOffset; 30*c65ebfc7SToomas Soome }; 31*c65ebfc7SToomas Soome typedef struct GenLinkedList GenLinkedList; 32*c65ebfc7SToomas Soome 33*c65ebfc7SToomas Soome 34*c65ebfc7SToomas Soome void InitLinkedList( GenLinkedList *pList, size_t linkOffset); 35*c65ebfc7SToomas Soome 36*c65ebfc7SToomas Soome void AddToHead( GenLinkedList *pList, void *elem); 37*c65ebfc7SToomas Soome void AddToTail( GenLinkedList *pList, void *elem); 38*c65ebfc7SToomas Soome 39*c65ebfc7SToomas Soome int RemoveFromList( GenLinkedList *pList, void *elem); 40*c65ebfc7SToomas Soome 41*c65ebfc7SToomas Soome int ReplaceElem( GenLinkedList *pList, void *elemInList, void *newElem); 42*c65ebfc7SToomas Soome 43*c65ebfc7SToomas Soome 44*c65ebfc7SToomas Soome 45*c65ebfc7SToomas Soome struct GenDoubleLinkedList 46*c65ebfc7SToomas Soome { 47*c65ebfc7SToomas Soome void *Head, 48*c65ebfc7SToomas Soome *Tail; 49*c65ebfc7SToomas Soome size_t FwdLinkOffset, 50*c65ebfc7SToomas Soome BackLinkOffset; 51*c65ebfc7SToomas Soome }; 52*c65ebfc7SToomas Soome typedef struct GenDoubleLinkedList GenDoubleLinkedList; 53*c65ebfc7SToomas Soome 54*c65ebfc7SToomas Soome 55*c65ebfc7SToomas Soome void InitDoubleLinkedList( GenDoubleLinkedList *pList, size_t fwdLinkOffset, 56*c65ebfc7SToomas Soome size_t backLinkOffset); 57*c65ebfc7SToomas Soome 58*c65ebfc7SToomas Soome void DLLAddToHead( GenDoubleLinkedList *pList, void *elem); 59*c65ebfc7SToomas Soome 60*c65ebfc7SToomas Soome void DLLRemoveFromList( GenDoubleLinkedList *pList, void *elem); 61*c65ebfc7SToomas Soome 62*c65ebfc7SToomas Soome 63*c65ebfc7SToomas Soome 64*c65ebfc7SToomas Soome /* A GenLinkedOffsetList is like a GenLinkedList that stores the *Next field as a signed */ 65*c65ebfc7SToomas Soome /* offset from the address of the beginning of the element, rather than as a pointer. */ 66*c65ebfc7SToomas Soome 67*c65ebfc7SToomas Soome struct GenLinkedOffsetList 68*c65ebfc7SToomas Soome { 69*c65ebfc7SToomas Soome size_t Head, 70*c65ebfc7SToomas Soome Tail; 71*c65ebfc7SToomas Soome size_t LinkOffset; 72*c65ebfc7SToomas Soome }; 73*c65ebfc7SToomas Soome typedef struct GenLinkedOffsetList GenLinkedOffsetList; 74*c65ebfc7SToomas Soome 75*c65ebfc7SToomas Soome 76*c65ebfc7SToomas Soome void InitLinkedOffsetList( GenLinkedOffsetList *pList, size_t linkOffset); 77*c65ebfc7SToomas Soome 78*c65ebfc7SToomas Soome void *GetHeadPtr( GenLinkedOffsetList *pList); 79*c65ebfc7SToomas Soome void *GetTailPtr( GenLinkedOffsetList *pList); 80*c65ebfc7SToomas Soome void *GetOffsetLink( GenLinkedOffsetList *pList, void *elem); 81*c65ebfc7SToomas Soome 82*c65ebfc7SToomas Soome void OffsetAddToHead( GenLinkedOffsetList *pList, void *elem); 83*c65ebfc7SToomas Soome void OffsetAddToTail( GenLinkedOffsetList *pList, void *elem); 84*c65ebfc7SToomas Soome 85*c65ebfc7SToomas Soome int OffsetRemoveFromList( GenLinkedOffsetList *pList, void *elem); 86*c65ebfc7SToomas Soome 87*c65ebfc7SToomas Soome int OffsetReplaceElem( GenLinkedOffsetList *pList, void *elemInList, void *newElem); 88*c65ebfc7SToomas Soome 89*c65ebfc7SToomas Soome 90*c65ebfc7SToomas Soome #endif // __GenLinkedList__ 91