47#define MEM_SIZE( size ) \
48 ALIGNED_SIZE( size, sizeof(que_t) )
54typedef struct __mem mem_t;
65typedef struct __mem mem_id [];
84#define _MEM_INIT( _limit, _size, _data ) { _LST_INIT(), _limit, _size, _data }
103#define _MEM_DATA( _limit, _size ) (que_t[_limit * (1 + _size)]){ { NULL } }
114#define OS_MEM_BUFFER( buf, limit, size ) \
115 que_t buf[limit * (1 + MEM_SIZE(size))]
125#define OS_MEM( mem, limit, size ) \
126 static que_t mem##__buf[limit * (1 + MEM_SIZE(size))]; \
127 mem_t mem[] = { _MEM_INIT( limit, MEM_SIZE(size), mem##__buf ) }
130#define static_MEM( mem, limit, size ) \
131 static que_t mem##__buf[limit * (1 + MEM_SIZE(size))]; \
132 static mem_t mem[] = { _MEM_INIT( limit, MEM_SIZE(size), mem##__buf ) }
146#define MEM_INIT( limit, size ) \
147 _MEM_INIT( limit, MEM_SIZE(size), _MEM_DATA(limit, MEM_SIZE(size)) )
162#define MEM_CREATE( limit, size ) \
163 { MEM_INIT ( limit, size ) }
182void mem_init( mem_t *mem,
size_t size, que_t *
data,
size_t bufsize );
276#if defined(__cplusplus)
287template<
unsigned limit_,
size_t size_>
291 MemoryPoolT(): __mem _MEM_INIT(limit_, MEM_SIZE(size_), data_) {}
293 ~MemoryPoolT() { assert(__mem::lst.obj.queue ==
nullptr); }
298 assert(_src.limit == limit_ && _src.lst.obj.queue ==
nullptr);
318 que_t data_[limit_ * (1 + MEM_SIZE(size_))];
329template<
unsigned limit_,
class C>
335 int take ( C **_data ) {
return mem_take (
this,
reinterpret_cast<void **
>(_data)); }
336 int tryWait ( C **_data ) {
return mem_tryWait (
this,
reinterpret_cast<void **
>(_data)); }
341 int wait ( C **_data ) {
return mem_wait (
this,
reinterpret_cast<void **
>(_data)); }
#define INFINITE
infinite waiting
Definition osbase.h:250
void mem_kill(mem_t *mem)
alias of mem_reset()
Definition osmemorypool.h:195
void mem_give(mem_t *mem, void *data)
transfer memory object to the memory pool object,
int mem_take(mem_t *mem, void **data)
try to get memory object from the memory pool object, don't wait if the memory pool object is empty
int mem_tryWait(mem_t *mem, void **data)
alias of mem_take()
Definition osmemorypool.h:212
int mem_waitUntil(mem_t *mem, void **data, cnt_t time)
try to get memory object from the memory pool object, wait until given timepoint while the memory poo...
int mem_wait(mem_t *mem, void **data)
try to get memory object from the memory pool object, wait indefinitely while the memory pool object ...
Definition osmemorypool.h:258
int mem_waitFor(mem_t *mem, void **data, cnt_t delay)
try to get memory object from the memory pool object, wait for given duration of time while the memor...
void mem_init(mem_t *mem, size_t size, que_t *data, size_t bufsize)
initialize a memory pool object
void mem_reset(mem_t *mem)
reset the memory pool object and wake up all waiting tasks with 'E_STOPPED' event value
char data[]
message data
Definition osmessagequeue.h:54
static constexpr rep until(const std::chrono::time_point< Clock, _Duration > &_time)
time point in ticks, rounded up to whole ticks (only a time point of this clock)
Definition osclock.h:109
static constexpr rep count(const std::chrono::duration< _Rep, _Period > &_delay)
delay in ticks, rounded up to whole ticks; negative delay: IMMEDIATE, delay out of range: INFINITE
Definition osclock.h:102
MemoryPoolTT()
constructor, see the constructor parameters of the class
Definition osmemorypool.h:332
int wait(C **_data)
mem_wait()
Definition osmemorypool.h:340
int waitUntil(C **_data, const T &_time)
mem_waitUntil()
Definition osmemorypool.h:339
int waitFor(C **_data, const T &_delay)
mem_waitFor()
Definition osmemorypool.h:337
int tryWait(C **_data)
mem_tryWait()
Definition osmemorypool.h:335
int take(C **_data)
mem_take()
Definition osmemorypool.h:334
create and initialize a memory pool object
Definition osmemorypool.h:288
int wait(void **_data)
mem_wait()
Definition osmemorypool.h:313
void reset()
mem_reset()
Definition osmemorypool.h:305
int tryWait(void **_data)
mem_tryWait()
Definition osmemorypool.h:308
void kill()
mem_kill()
Definition osmemorypool.h:306
int waitUntil(void **_data, const T &_time)
mem_waitUntil()
Definition osmemorypool.h:312
int waitFor(void **_data, const T &_delay)
mem_waitFor()
Definition osmemorypool.h:310
void give(void *_data)
mem_give()
Definition osmemorypool.h:314
int take(void **_data)
mem_take()
Definition osmemorypool.h:307
MemoryPoolT()
constructor, see the constructor parameters of the class
Definition osmemorypool.h:290