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