bzr branch
http://gegoxaren.bato24.eu/bzr/simpletypesystem/trunk
|
99
by Gustav Hartvigsson
* Working on RingBuffer and Stream. |
1 |
#include "RingBuffer.h" |
2 |
||
3 |
||
4 |
struct SRingBuffer { |
|
5 |
size_t len; |
|
6 |
size_t start; |
|
7 |
size_t end; |
|
8 |
|
|
9 |
sbyte * array; |
|
10 |
}
|
|
11 |
||
12 |
||
13 |
SRingBuffer * |
|
14 |
s_ring_buffer_new (size_t len) { |
|
15 |
SRingBuffer * self = malloc (sizeof (SRingBuffer)); |
|
16 |
self->array = calloc (len, size_t (sbyte)); |
|
17 |
|
|
18 |
self->len = len; |
|
19 |
self->start = 0; |
|
20 |
self->end = 0; |
|
21 |
|
|
22 |
return self; |
|
23 |
}
|
|
24 |
||
25 |
||
26 |
void
|
|
27 |
s_ring_buffer_free (SRingBuffer * self) { |
|
28 |
free (self->array); |
|
29 |
free (self); |
|
30 |
}
|
|
31 |
||
32 |
sboolean
|
|
33 |
s_ring_buffer_is_empty (SRingBuffer * self) { |
|
34 |
return (self->start == self->end); |
|
35 |
}
|
|
36 |
||
37 |
void
|
|
38 |
s_ring_buffer_push (SRingBuffer * self, |
|
39 |
sbyte data); |
|
40 |
||
41 |
||
42 |
void
|
|
43 |
s_ring_buffer_push_back (SRingBuffer * self, |
|
44 |
sbyte data); |
|
45 |
||
46 |
||
47 |
sbyte
|
|
48 |
s_ring_buffer_pop (SRingBuffer * self); |
|
49 |
||
50 |
||
51 |
sbyte
|
|
52 |
s_ring_buffer_pop_back (SRingBuffer * self); |
|
53 |
||
54 |
||
55 |
void
|
|
56 |
s_ring_buffer_realloc (SRingBuffer * self, |
|
57 |
size_t len); |
|
58 |
||
59 |
||
60 |
size_t
|
|
61 |
s_ring_buffer_len (SRingBuffer * self); |
|
62 |
||
63 |
||
64 |
size_t
|
|
65 |
s_ring_buffer_size (SRingBuffer * self); |
|
66 |
||
67 |
||
68 |
void
|
|
69 |
s_ring_buffer_for_each (SRingBuffer * self, |
|
70 |
ForEachFunc func, |
|
71 |
spointer user_data); |
|
72 |