File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / lib / fifo.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Nov 2 10:09:11 2016 UTC (8 years ago) by misho
Branches: quagga, MAIN
CVS tags: v1_0_20160315, HEAD
quagga 1.0.20160315

    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>