147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/* -*- Mode: C; tab-width: 4 -*- 247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * 347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * Copyright (c) 2003 Apple Computer, Inc. All rights reserved. 447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * 547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * Licensed under the Apache License, Version 2.0 (the "License"); 647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * you may not use this file except in compliance with the License. 747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * You may obtain a copy of the License at 847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * 947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * http://www.apache.org/licenses/LICENSE-2.0 1047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * 1147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * Unless required by applicable law or agreed to in writing, software 1247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * distributed under the License is distributed on an "AS IS" BASIS, 1347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * See the License for the specific language governing permissions and 1547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * limitations under the License. 1647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt */ 1747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 1847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#ifndef __GenLinkedList__ 1947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define __GenLinkedList__ 2047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 2147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 2247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#include <stddef.h> 2347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 2447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 2547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstruct GenLinkedList 2647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 2747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt void *Head, 2847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *Tail; 2947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t LinkOffset; 3047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt}; 3147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalttypedef struct GenLinkedList GenLinkedList; 3247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 3347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 3447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid InitLinkedList( GenLinkedList *pList, size_t linkOffset); 3547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 3647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid AddToHead( GenLinkedList *pList, void *elem); 3747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid AddToTail( GenLinkedList *pList, void *elem); 3847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 3947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltint RemoveFromList( GenLinkedList *pList, void *elem); 4047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 4147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltint ReplaceElem( GenLinkedList *pList, void *elemInList, void *newElem); 4247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 4347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 4447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 4547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstruct GenDoubleLinkedList 4647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 4747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt void *Head, 4847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *Tail; 4947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t FwdLinkOffset, 5047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt BackLinkOffset; 5147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt}; 5247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalttypedef struct GenDoubleLinkedList GenDoubleLinkedList; 5347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 5447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 5547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid InitDoubleLinkedList( GenDoubleLinkedList *pList, size_t fwdLinkOffset, 5647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t backLinkOffset); 5747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 5847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid DLLAddToHead( GenDoubleLinkedList *pList, void *elem); 5947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 6047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid DLLRemoveFromList( GenDoubleLinkedList *pList, void *elem); 6147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 6247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 6347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 6447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/* A GenLinkedOffsetList is like a GenLinkedList that stores the *Next field as a signed */ 6547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/* offset from the address of the beginning of the element, rather than as a pointer. */ 6647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 6747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstruct GenLinkedOffsetList 6847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 6947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t Head, 7047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt Tail; 7147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t LinkOffset; 7247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt}; 7347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalttypedef struct GenLinkedOffsetList GenLinkedOffsetList; 7447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 7547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 7647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid InitLinkedOffsetList( GenLinkedOffsetList *pList, size_t linkOffset); 7747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 7847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid *GetHeadPtr( GenLinkedOffsetList *pList); 7947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid *GetTailPtr( GenLinkedOffsetList *pList); 8047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid *GetOffsetLink( GenLinkedOffsetList *pList, void *elem); 8147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 8247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid OffsetAddToHead( GenLinkedOffsetList *pList, void *elem); 8347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid OffsetAddToTail( GenLinkedOffsetList *pList, void *elem); 8447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 8547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltint OffsetRemoveFromList( GenLinkedOffsetList *pList, void *elem); 8647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 8747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltint OffsetReplaceElem( GenLinkedOffsetList *pList, void *elemInList, void *newElem); 8847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 8947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 9047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif // __GenLinkedList__ 91