Merge branch 'master' of github.com:Minep/lunaix-os
[lunaix-os.git] / lunaix-os / includes / lunaix / ds / rbuffer.h
1 #ifndef __LUNAIX_RBUFFER_H
2 #define __LUNAIX_RBUFFER_H
3
4 #include <lunaix/types.h>
5
6 struct rbuffer
7 {
8     char* buffer;
9     size_t maxsz;
10     off_t ptr;
11     size_t len;
12 };
13
14 static inline void
15 rbuffer_init(struct rbuffer* rb, char* buf, size_t maxsz)
16 {
17     *rb = (struct rbuffer){ .buffer = buf, .maxsz = maxsz };
18 }
19
20 struct rbuffer*
21 rbuffer_create(char* buf, size_t maxsz);
22
23 static inline void
24 rbuffer_clear(struct rbuffer* rb)
25 {
26     rb->len = rb->ptr = 0;
27 }
28
29 static inline bool
30 rbuffer_empty(struct rbuffer* rb)
31 {
32     return rb->len == 0;
33 }
34
35 static inline bool
36 rbuffer_full(struct rbuffer* rb)
37 {
38     return rb->len == rb->maxsz;
39 }
40
41 int
42 rbuffer_erase(struct rbuffer* rb);
43
44 int
45 rbuffer_put(struct rbuffer* rb, char c);
46
47 int
48 rbuffer_puts(struct rbuffer* rb, char* c, size_t len);
49
50 int
51 rbuffer_gets(struct rbuffer* rb, char* buf, size_t len);
52
53 int
54 rbuffer_get(struct rbuffer* rb, char* c);
55
56 #endif /* __LUNAIX_RBUFFER_H */