1 #ifndef FIO_FIFO_H 2 #define FIO_FIFO_H 3 /* 4 * A simple FIFO implementation. 5 * 6 * Copyright (C) 2004 Stelian Pop <stelian (at) popies.net> 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 21 * 22 */ 23 #include "minmax.h" 24 25 struct fifo { 26 unsigned char *buffer; /* the buffer holding the data */ 27 unsigned int size; /* the size of the allocated buffer */ 28 unsigned int in; /* data is added at offset (in % size) */ 29 unsigned int out; /* data is extracted from off. (out % size) */ 30 }; 31 32 struct fifo *fifo_alloc(unsigned int); 33 unsigned int fifo_put(struct fifo *, void *, unsigned int); 34 unsigned int fifo_get(struct fifo *, void *, unsigned int); 35 void fifo_free(struct fifo *); 36 37 static inline unsigned int fifo_len(struct fifo *fifo) 38 { 39 return fifo->in - fifo->out; 40 } 41 42 static inline unsigned int fifo_room(struct fifo *fifo) 43 { 44 return fifo->size - fifo->in + fifo->out; 45 } 46 47 #endif 48