xref: /illumos-gate/usr/src/contrib/mDNSResponder/mDNSShared/GenLinkedList.h (revision c65ebfc7045424bd04a6c7719a27b0ad3399ad54)
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