X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/78cd005fac540973751b5a108c37a715bc64b5a2..59ecf21e36b2332f6adf2a568ef555283d8c119a:/lunaix-os/includes/lunaix/ds/rbuffer.h diff --git a/lunaix-os/includes/lunaix/ds/rbuffer.h b/lunaix-os/includes/lunaix/ds/rbuffer.h new file mode 100644 index 0000000..f3777b6 --- /dev/null +++ b/lunaix-os/includes/lunaix/ds/rbuffer.h @@ -0,0 +1,56 @@ +#ifndef __LUNAIX_RBUFFER_H +#define __LUNAIX_RBUFFER_H + +#include + +struct rbuffer +{ + char* buffer; + size_t maxsz; + off_t ptr; + size_t len; +}; + +static inline void +rbuffer_init(struct rbuffer* rb, char* buf, size_t maxsz) +{ + *rb = (struct rbuffer){ .buffer = buf, .maxsz = maxsz }; +} + +struct rbuffer* +rbuffer_create(char* buf, size_t maxsz); + +static inline void +rbuffer_clear(struct rbuffer* rb) +{ + rb->len = rb->ptr = 0; +} + +static inline bool +rbuffer_empty(struct rbuffer* rb) +{ + return rb->len == 0; +} + +static inline bool +rbuffer_full(struct rbuffer* rb) +{ + return rb->len == rb->maxsz; +} + +int +rbuffer_erase(struct rbuffer* rb); + +int +rbuffer_put(struct rbuffer* rb, char c); + +int +rbuffer_puts(struct rbuffer* rb, char* c, size_t len); + +int +rbuffer_gets(struct rbuffer* rb, char* buf, size_t len); + +int +rbuffer_get(struct rbuffer* rb, char* c); + +#endif /* __LUNAIX_RBUFFER_H */