1/* 2 Unix SMB/Netbios implementation. 3 Version 1.9. 4 some simple double linked list macros 5 Copyright (C) Andrew Tridgell 1998 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 2 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program; if not, write to the Free Software 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20*/ 21 22/* To use these macros you must have a structure containing a next and 23 prev pointer */ 24 25 26/* hook into the front of the list */ 27#define DLIST_ADD(list, p) \ 28{ \ 29 if (!(list)) { \ 30 (list) = (p); \ 31 (p)->next = (p)->prev = NULL; \ 32 } else { \ 33 (list)->prev = (p); \ 34 (p)->next = (list); \ 35 (p)->prev = NULL; \ 36 (list) = (p); \ 37 }\ 38} 39 40 41/* remove an element from a list */ 42#define DLIST_REMOVE(list, p) \ 43{ \ 44 if ((p) == (list)) { \ 45 (list) = (p)->next; \ 46 if (list) (list)->prev = NULL; \ 47 } else { \ 48 (p)->prev->next = (p)->next; \ 49 if ((p)->next) (p)->next->prev = (p)->prev; \ 50 } \ 51} 52 53/* promote an element to the top of the list */ 54#define DLIST_PROMOTE(list, p) \ 55 DLIST_REMOVE(list, p) \ 56 DLIST_ADD(list, p) 57