|
|
1.1 root 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) 3/8/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) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.