#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 */