]>
Commit | Line | Data |
---|---|---|
ea863ec6 | 1 | /* FIFO common header. |
896014f4 DL |
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 along | |
17 | * with this program; see the file COPYING; if not, write to the Free Software | |
18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
19 | */ | |
ea863ec6 DS |
20 | #ifndef __LIB_FIFO_H__ |
21 | #define __LIB_FIFO_H__ | |
22 | ||
23 | /* FIFO -- first in first out structure and macros. */ | |
d62a17ae | 24 | struct fifo { |
25 | struct fifo *next; | |
26 | struct fifo *prev; | |
ea863ec6 DS |
27 | }; |
28 | ||
d62a17ae | 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__ */ |