Lines Matching refs:ring
102 ring_init(Ring *ring, unsigned char *buffer, int count) in ring_init() argument
104 (void) memset(ring, 0, sizeof (*ring)); in ring_init()
106 ring->size = count; in ring_init()
108 ring->supply = ring->consume = ring->bottom = buffer; in ring_init()
110 ring->top = ring->bottom+ring->size; in ring_init()
112 ring->clearto = 0; in ring_init()
124 ring_mark(Ring *ring) in ring_mark() argument
126 ring->mark = ring_decrement(ring, ring->supply, 1); in ring_mark()
134 ring_at_mark(Ring *ring) in ring_at_mark() argument
136 if (ring->mark == ring->consume) { in ring_at_mark()
148 ring_clear_mark(Ring *ring) in ring_clear_mark() argument
150 ring->mark = 0; in ring_clear_mark()
157 ring_supplied(Ring *ring, int count) in ring_supplied() argument
159 ring->supply = ring_increment(ring, ring->supply, count); in ring_supplied()
160 ring->supplytime = ++ring_clock; in ring_supplied()
167 ring_consumed(Ring *ring, int count) in ring_consumed() argument
172 if (ring->mark && in ring_consumed()
173 (ring_subtract(ring, ring->mark, ring->consume) < count)) { in ring_consumed()
174 ring->mark = 0; in ring_consumed()
177 if (ring->consume < ring->clearto && in ring_consumed()
178 ring->clearto <= ring->consume + count) in ring_consumed()
179 ring->clearto = 0; in ring_consumed()
180 else if (ring->consume + count > ring->top && in ring_consumed()
181 ring->bottom <= ring->clearto) in ring_consumed()
182 ring->clearto = 0; in ring_consumed()
184 ring->consume = ring_increment(ring, ring->consume, count); in ring_consumed()
185 ring->consumetime = ++ring_clock; in ring_consumed()
189 if (ring_empty(ring)) { in ring_consumed()
190 ring->consume = ring->supply = ring->bottom; in ring_consumed()
201 ring_empty_count(Ring *ring) in ring_empty_count() argument
203 if (ring_empty(ring)) { /* if empty */ in ring_empty_count()
204 return (ring->size); in ring_empty_count()
206 return (ring_subtract(ring, ring->consume, ring->supply)); in ring_empty_count()
212 ring_empty_consecutive(Ring *ring) in ring_empty_consecutive() argument
214 if ((ring->consume < ring->supply) || ring_empty(ring)) { in ring_empty_consecutive()
219 return (ring_subtract(ring, ring->top, ring->supply)); in ring_empty_consecutive()
224 return (ring_subtract(ring, ring->consume, ring->supply)); in ring_empty_consecutive()
234 ring_full_count(Ring *ring) in ring_full_count() argument
236 if ((ring->mark == 0) || (ring->mark == ring->consume)) { in ring_full_count()
237 if (ring_full(ring)) { in ring_full_count()
238 return (ring->size); /* nothing consumed, but full */ in ring_full_count()
240 return (ring_subtract(ring, ring->supply, in ring_full_count()
241 ring->consume)); in ring_full_count()
244 return (ring_subtract(ring, ring->mark, ring->consume)); in ring_full_count()
253 ring_full_consecutive(Ring *ring) in ring_full_consecutive() argument
255 if ((ring->mark == 0) || (ring->mark == ring->consume)) { in ring_full_consecutive()
256 if ((ring->supply < ring->consume) || ring_full(ring)) { in ring_full_consecutive()
257 return (ring_subtract(ring, ring->top, ring->consume)); in ring_full_consecutive()
259 return (ring_subtract(ring, ring->supply, in ring_full_consecutive()
260 ring->consume)); in ring_full_consecutive()
263 if (ring->mark < ring->consume) { in ring_full_consecutive()
264 return (ring_subtract(ring, ring->top, ring->consume)); in ring_full_consecutive()
266 return (ring_subtract(ring, ring->mark, ring->consume)); in ring_full_consecutive()
275 ring_supply_data(Ring *ring, unsigned char *buffer, int count) in ring_supply_data() argument
280 i = MIN(count, ring_empty_consecutive(ring)); in ring_supply_data()
281 (void) memcpy(ring->supply, buffer, i); in ring_supply_data()
282 ring_supplied(ring, i); in ring_supply_data()
294 ring_consume_data(Ring *ring, unsigned char *buffer, int count) in ring_consume_data() argument
299 i = MIN(count, ring_full_consecutive(ring)); in ring_consume_data()
300 memcpy(buffer, ring->consume, i); in ring_consume_data()
301 ring_consumed(ring, i); in ring_consume_data()
309 ring_encrypt(Ring *ring, void (*encryptor)()) in ring_encrypt() argument
313 if (ring_empty(ring) || ring->clearto == ring->supply) in ring_encrypt()
316 if ((c = ring->clearto) == NULL) in ring_encrypt()
317 c = ring->consume; in ring_encrypt()
319 s = ring->supply; in ring_encrypt()
322 (*encryptor)(c, ring->top - c); in ring_encrypt()
323 (*encryptor)(ring->bottom, s - ring->bottom); in ring_encrypt()
327 ring->clearto = ring->supply; in ring_encrypt()
331 ring_clearto(Ring *ring) in ring_clearto() argument
333 if (!ring_empty(ring)) in ring_clearto()
334 ring->clearto = ring->supply; in ring_clearto()
336 ring->clearto = 0; in ring_clearto()