Annotation of embedaddon/quagga/lib/fifo.h, revision 1.1.1.1

1.1       misho       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.  */
                     24: struct fifo
                     25: {
                     26:   struct fifo *next;
                     27:   struct fifo *prev;
                     28: };
                     29: 
                     30: #define FIFO_INIT(F)                                  \
                     31:   do {                                                \
                     32:     struct fifo *Xfifo = (struct fifo *)(F);          \
                     33:     Xfifo->next = Xfifo->prev = Xfifo;                \
                     34:   } while (0)
                     35: 
                     36: #define FIFO_ADD(F,N)                                 \
                     37:   do {                                                \
                     38:     struct fifo *Xfifo = (struct fifo *)(F);          \
                     39:     struct fifo *Xnode = (struct fifo *)(N);          \
                     40:     Xnode->next = Xfifo;                              \
                     41:     Xnode->prev = Xfifo->prev;                        \
                     42:     Xfifo->prev = Xfifo->prev->next = Xnode;          \
                     43:   } while (0)
                     44: 
                     45: #define FIFO_DEL(N)                                   \
                     46:   do {                                                \
                     47:     struct fifo *Xnode = (struct fifo *)(N);          \
                     48:     Xnode->prev->next = Xnode->next;                  \
                     49:     Xnode->next->prev = Xnode->prev;                  \
                     50:   } while (0)
                     51: 
                     52: #define FIFO_HEAD(F)                                  \
                     53:   ((((struct fifo *)(F))->next == (struct fifo *)(F)) \
                     54:   ? NULL : (F)->next)
                     55: 
                     56: #define FIFO_EMPTY(F)                                 \
                     57:   (((struct fifo *)(F))->next == (struct fifo *)(F))
                     58: 
                     59: #define FIFO_TOP(F)                                   \
                     60:   (FIFO_EMPTY(F) ? NULL : ((struct fifo *)(F))->next)
                     61: 
                     62: #endif /* __LIB_FIFO_H__ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>