HALFRED  0.4.0
hal_iobuf.h
Go to the documentation of this file.
1 
10 #ifndef HAL_IOBUF_H
11 #define HAL_IOBUF_H
12 
13 #include <stdint.h>
14 #include <stddef.h>
15 
16 
72 
73 #if defined HAL_IOBUF_LIMIT_SIZE
74  #if HAL_IOBUF_LIMIT_SIZE <= 8
75  typedef uint_fast8_t iobuf_size_t;
76  #elif HAL_IOBUF_LIMIT_SIZE <= 16
77  typedef uint_fast16_t iobuf_size_t;
78  #else
79  typedef uint_fast32_t iobuf_size_t;
80  #endif
81 #else
82  typedef size_t iobuf_size_t;
83 #endif
84 
88 typedef struct
89 {
91  iobuf_size_t elem_count;
93  iobuf_size_t elem_size;
95  iobuf_size_t max_elem_count;
97  void* mem_ptr;
99  void* read_ptr;
101  void* write_ptr;
102 } IOBufDesc, *IOBuf;
103 
104 
114 IOBuf IOBUF_Create(iobuf_size_t elem_size, iobuf_size_t max_elem_count);
115 
121 IOBuf IOBUF_Destroy(IOBuf iobuf);
122 
128 iobuf_size_t IOBUF_GetCount(IOBuf iobuf);
129 
137 iobuf_size_t IOBUF_GetSpace(IOBuf iobuf);
138 
145 iobuf_size_t IOBUF_GetSize(IOBuf iobuf);
146 
160 IOBuf IOBUF_Init(void* buf_ptr, iobuf_size_t buf_size, iobuf_size_t elem_size);
161 
172 iobuf_size_t IOBUF_Read(IOBuf iobuf, void* data, iobuf_size_t elem_count);
173 
183 iobuf_size_t IOBUF_Write(IOBuf iobuf, const void* data, iobuf_size_t elem_count);
184 
212 iobuf_size_t IOBUF_ReadNextFragment(IOBuf iobuf, iobuf_size_t fragment_size, void** next_fragment_ptr, iobuf_size_t* next_fragment_size);
213 
243 iobuf_size_t IOBUF_WriteNextFragment(IOBuf iobuf, iobuf_size_t fragment_size, void** next_fragment_ptr, iobuf_size_t* next_fragment_size);
244 
253 iobuf_size_t IOBUF_ReadFast(IOBuf iobuf, void* elem);
254 
263 iobuf_size_t IOBUF_WriteFast(IOBuf iobuf, const void* elem);
264 
269 void IOBUF_Clear(IOBuf iobuf);
270 
283 iobuf_size_t IOBUF_Peek(IOBuf iobuf, void* data, iobuf_size_t elem_count);
284 
285 
299 iobuf_size_t IOBUF_Move(IOBuf dst_iobuf, IOBuf src_iobuf, iobuf_size_t elem_count);
300 
301 
310 iobuf_size_t IOBUF_Remove(IOBuf iobuf, iobuf_size_t elem_count);
311 
312 
316 #define IOBUF_DECLARE(name, count, size) \
317  static uint8_t name##_mempool[(count)*(size)]; \
318  static IOBufDesc name = { 0, size, count, &name##_mempool, &name##_mempool, &name##_mempool };
319 
328 #endif /* hal_iobuf_h */
329 
iobuf_size_t IOBUF_Write(IOBuf iobuf, const void *data, iobuf_size_t elem_count)
iobuf_size_t IOBUF_Read(IOBuf iobuf, void *data, iobuf_size_t elem_count)
void * mem_ptr
Pointer to the actual buffer pool memory area.
Definition: hal_iobuf.h:97
iobuf_size_t elem_size
Size of the single element (in bytes)
Definition: hal_iobuf.h:93
IOBuf IOBUF_Create(iobuf_size_t elem_size, iobuf_size_t max_elem_count)
iobuf_size_t IOBUF_ReadNextFragment(IOBuf iobuf, iobuf_size_t fragment_size, void **next_fragment_ptr, iobuf_size_t *next_fragment_size)
void * write_ptr
Pointer to the are where next element will be written.
Definition: hal_iobuf.h:101
IOBuf IOBUF_Destroy(IOBuf iobuf)
iobuf_size_t elem_count
Number of elements stored in a a buffer.
Definition: hal_iobuf.h:91
iobuf_size_t IOBUF_GetCount(IOBuf iobuf)
void * read_ptr
Pointer to the next element to read.
Definition: hal_iobuf.h:99
void IOBUF_Clear(IOBuf iobuf)
iobuf_size_t IOBUF_Move(IOBuf dst_iobuf, IOBuf src_iobuf, iobuf_size_t elem_count)
iobuf_size_t IOBUF_ReadFast(IOBuf iobuf, void *elem)
IOBuf IOBUF_Init(void *buf_ptr, iobuf_size_t buf_size, iobuf_size_t elem_size)
iobuf_size_t IOBUF_Peek(IOBuf iobuf, void *data, iobuf_size_t elem_count)
iobuf_size_t IOBUF_GetSpace(IOBuf iobuf)
iobuf_size_t max_elem_count
Maximum number of elements that the buffer can store (logical size of the buffer) ...
Definition: hal_iobuf.h:95
iobuf_size_t IOBUF_Remove(IOBuf iobuf, iobuf_size_t elem_count)
iobuf_size_t IOBUF_GetSize(IOBuf iobuf)
Definition: hal_iobuf.h:88
iobuf_size_t IOBUF_WriteFast(IOBuf iobuf, const void *elem)
iobuf_size_t IOBUF_WriteNextFragment(IOBuf iobuf, iobuf_size_t fragment_size, void **next_fragment_ptr, iobuf_size_t *next_fragment_size)