1 /* 2 * Copyright (c) 1988 Regents of the University of California. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms are permitted 6 * provided that this notice is preserved and that due credit is given 7 * to the University of California at Berkeley. The name of the University 8 * may not be used to endorse or promote products derived from this 9 * software without specific prior written permission. This software 10 * is provided ``as is'' without express or implied warranty. 11 * 12 * @(#)ring.h 1.6 (Berkeley) 03/08/88 13 */ 14 15 /* 16 * This defines a structure for a ring buffer. 17 * 18 * The circular buffer has two parts: 19 *((( 20 * full: [consume, supply) 21 * empty: [supply, consume) 22 *]]] 23 * 24 */ 25 typedef struct { 26 char *consume, /* where data comes out of */ 27 *supply, /* where data comes in to */ 28 *bottom, /* lowest address in buffer */ 29 *top, /* highest address+1 in buffer */ 30 *mark; /* marker (user defined) */ 31 int size; /* size in bytes of buffer */ 32 u_long consumetime, /* help us keep straight full, empty, etc. */ 33 supplytime; 34 } Ring; 35 36 /* Here are some functions and macros to deal with the ring buffer */ 37 38 39 #if defined(LINT_ARGS) 40 41 /* Initialization routine */ 42 extern int 43 ring_init(Ring *ring, char *buffer, int count); 44 45 /* Data movement routines */ 46 extern void 47 ring_supply_data(Ring *ring, char *buffer, int count), 48 ring_consume_data(Ring *ring, char *buffer, int count); 49 50 /* Buffer state transition routines */ 51 extern void 52 ring_supplied(Ring *ring, int count), 53 ring_consumed(Ring *ring, int count); 54 55 /* Buffer state query routines */ 56 extern int 57 ring_empty_count(Ring *ring), 58 ring_empty_consecutive(Ring *ring), 59 ring_full_count(Ring *ring), 60 ring_full_consecutive(Ring *ring); 61 62 #endif /* defined(LINT_ARGS) */ 63