forked from acouzens/open5gs
58 lines
1.4 KiB
C
58 lines
1.4 KiB
C
#ifndef __CORE_RINGBUF_H__
|
|
#define __CORE_RINGBUF_H__
|
|
|
|
#include "core.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
struct _rbuf_header_t {
|
|
int head, tail, size;
|
|
char *pool;
|
|
};
|
|
|
|
#define rbuf_declare(__name, __size) \
|
|
struct { \
|
|
struct _rbuf_header_t h; \
|
|
char int_pool[(__size) + 1]; \
|
|
} __name
|
|
|
|
#define rbuf_declare_ext(__name) \
|
|
struct { \
|
|
struct _rbuf_header_t h; \
|
|
} __name
|
|
|
|
#define rbuf_init(__pname, __size) \
|
|
((__pname)->h.head = (__pname)->h.tail = 0, \
|
|
(__pname)->h.size = __size, \
|
|
(__pname)->h.pool = (__pname)->int_pool)
|
|
|
|
#define rbuf_init_ext(__pname, __size, __ext_pool) \
|
|
((__pname)->h.head = (__pname)->h.tail = 0, \
|
|
(__pname)->h.size = __size, \
|
|
(__pname)->h.pool = (char *)(__ext_pool))
|
|
|
|
#define rbuf_size(__pname) ((__pname)->h.size)
|
|
|
|
#define rbuf_is_empty(__pname) ((__pname)->h.head == (__pname)->h.tail)
|
|
#define rbuf_is_full(__pname) (rbuf_free_bytes(__pname) == 0)
|
|
|
|
CORE_DECLARE(int) rbuf_bytes(void *__pname);
|
|
|
|
CORE_DECLARE(int) rbuf_free_bytes(void *__pname);
|
|
|
|
CORE_DECLARE(int) rbuf_skip_write_pos(void *__pname, int __len);
|
|
|
|
CORE_DECLARE(int) rbuf_write(void *__pname, const char *__buf, int __buf_len);
|
|
|
|
CORE_DECLARE(int) rbuf_skip_read_pos(void *__pname, int __len);
|
|
|
|
CORE_DECLARE(int) rbuf_read(void *__pname, char *__buf, int __buf_len);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* ! __CORE_RINGBUF_H__ */
|