]>
Commit | Line | Data |
---|---|---|
ea863ec6 DS |
1 | /* FIFO common header. |
2 | Copyright (C) 2015 Kunihiro Ishiguro | |
3 | ||
4 | This file is part of Quagga. | |
5 | ||
6 | Quagga is free software; you can redistribute it and/or modify it | |
7 | under the terms of the GNU General Public License as published by the | |
8 | Free Software Foundation; either version 2, or (at your option) any | |
9 | later version. | |
10 | ||
11 | Quagga is distributed in the hope that it will be useful, but | |
12 | WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | General Public License for more details. | |
15 | ||
16 | You should have received a copy of the GNU General Public License | |
17 | along with GNU Zebra; see the file COPYING. If not, write to the Free | |
18 | Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | |
19 | 02111-1307, USA. */ | |
20 | #ifndef __LIB_FIFO_H__ | |
21 | #define __LIB_FIFO_H__ | |
22 | ||
23 | /* FIFO -- first in first out structure and macros. */ | |
ac4d0be5 | 24 | struct fifo { |
25 | struct fifo *next; | |
26 | struct fifo *prev; | |
ea863ec6 DS |
27 | }; |
28 | ||
ac4d0be5 | 29 | #define FIFO_INIT(F) \ |
30 | do { \ | |
31 | struct fifo *Xfifo = (struct fifo *)(F); \ | |
32 | Xfifo->next = Xfifo->prev = Xfifo; \ | |
33 | } while (0) | |
34 | ||
35 | #define FIFO_ADD(F, N) \ | |
36 | do { \ | |
37 | struct fifo *Xfifo = (struct fifo *)(F); \ | |
38 | struct fifo *Xnode = (struct fifo *)(N); \ | |
39 | Xnode->next = Xfifo; \ | |
40 | Xnode->prev = Xfifo->prev; \ | |
41 | Xfifo->prev = Xfifo->prev->next = Xnode; \ | |
42 | } while (0) | |
43 | ||
44 | #define FIFO_DEL(N) \ | |
45 | do { \ | |
46 | struct fifo *Xnode = (struct fifo *)(N); \ | |
47 | Xnode->prev->next = Xnode->next; \ | |
48 | Xnode->next->prev = Xnode->prev; \ | |
49 | } while (0) | |
50 | ||
51 | #define FIFO_HEAD(F) \ | |
52 | ((((struct fifo *)(F))->next == (struct fifo *)(F)) ? NULL : (F)->next) | |
53 | ||
54 | #define FIFO_EMPTY(F) (((struct fifo *)(F))->next == (struct fifo *)(F)) | |
55 | ||
56 | #define FIFO_TOP(F) (FIFO_EMPTY(F) ? NULL : ((struct fifo *)(F))->next) | |
ea863ec6 DS |
57 | |
58 | #endif /* __LIB_FIFO_H__ */ |