2    Copyright (C) 2015 Kunihiro Ishiguro
 
   4 This file is part of Quagga.
 
   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
 
  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.
 
  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
 
  20 #ifndef __LIB_FIFO_H__
 
  21 #define __LIB_FIFO_H__
 
  23 /* FIFO -- first in first out structure and macros.  */
 
  31 #define FIFO_INIT(F)                                  \
 
  33     struct fifo *Xfifo = (struct fifo *)(F);          \
 
  34     Xfifo->next = Xfifo->prev = Xfifo;                \
 
  37 #define FIFO_ADD(F,N)                                 \
 
  39     struct fifo *Xfifo = (struct fifo *)(F);          \
 
  40     struct fifo *Xnode = (struct fifo *)(N);          \
 
  41     Xnode->next = Xfifo;                              \
 
  42     Xnode->prev = Xfifo->prev;                        \
 
  43     Xfifo->prev = Xfifo->prev->next = Xnode;          \
 
  48     struct fifo *Xnode = (struct fifo *)(N);          \
 
  49     Xnode->prev->next = Xnode->next;                  \
 
  50     Xnode->next->prev = Xnode->prev;                  \
 
  53 #define FIFO_HEAD(F)                                  \
 
  54   ((((struct fifo *)(F))->next == (struct fifo *)(F)) \
 
  57 #define FIFO_EMPTY(F)                                 \
 
  58   (((struct fifo *)(F))->next == (struct fifo *)(F))
 
  61   (FIFO_EMPTY(F) ? NULL : ((struct fifo *)(F))->next)
 
  63 #endif /* __LIB_FIFO_H__ */