123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- typedef struct ngtcp2_objalloc {
- ngtcp2_balloc balloc;
- ngtcp2_opl opl;
- } ngtcp2_objalloc;
- void ngtcp2_objalloc_init(ngtcp2_objalloc *objalloc, size_t blklen,
- const ngtcp2_mem *mem);
- void ngtcp2_objalloc_free(ngtcp2_objalloc *objalloc);
- void ngtcp2_objalloc_clear(ngtcp2_objalloc *objalloc);
- inline static void ngtcp2_objalloc_
- ngtcp2_objalloc *objalloc, size_t nmemb, const ngtcp2_mem *mem) { \
- ngtcp2_objalloc_init( \
- objalloc, ((sizeof(TYPE) + 0xfu) & ~(uintptr_t)0xfu) * nmemb, mem); \
- } \
- \
- TYPE *ngtcp2_objalloc_
- \
- TYPE *ngtcp2_objalloc_
- size_t len); \
- \
- inline static void ngtcp2_objalloc_
- ngtcp2_objalloc *objalloc, TYPE *obj) { \
- ngtcp2_opl_push(&objalloc->opl, &obj->OPLENTFIELD); \
- }
- TYPE *ngtcp2_objalloc_
- ngtcp2_opl_entry *oplent = ngtcp2_opl_pop(&objalloc->opl); \
- TYPE *obj; \
- int rv; \
- \
- if (!oplent) { \
- rv = \
- ngtcp2_balloc_get(&objalloc->balloc, (void **)&obj, sizeof(TYPE)); \
- if (rv != 0) { \
- return NULL; \
- } \
- \
- return obj; \
- } \
- \
- return ngtcp2_struct_of(oplent, TYPE, OPLENTFIELD); \
- } \
- \
- TYPE *ngtcp2_objalloc_
- size_t len) { \
- ngtcp2_opl_entry *oplent = ngtcp2_opl_pop(&objalloc->opl); \
- TYPE *obj; \
- int rv; \
- \
- if (!oplent) { \
- rv = ngtcp2_balloc_get(&objalloc->balloc, (void **)&obj, len); \
- if (rv != 0) { \
- return NULL; \
- } \
- \
- return obj; \
- } \
- \
- return ngtcp2_struct_of(oplent, TYPE, OPLENTFIELD); \
- }
- inline static void ngtcp2_objalloc_
- ngtcp2_objalloc *objalloc, size_t nmemb, const ngtcp2_mem *mem) { \
- ngtcp2_objalloc_init( \
- objalloc, ((sizeof(TYPE) + 0xfu) & ~(uintptr_t)0xfu) * nmemb, mem); \
- } \
- \
- inline static TYPE *ngtcp2_objalloc_
- ngtcp2_objalloc *objalloc) { \
- return ngtcp2_mem_malloc(objalloc->balloc.mem, sizeof(TYPE)); \
- } \
- \
- inline static TYPE *ngtcp2_objalloc_
- ngtcp2_objalloc *objalloc, size_t len) { \
- return ngtcp2_mem_malloc(objalloc->balloc.mem, len); \
- } \
- \
- inline static void ngtcp2_objalloc_
- ngtcp2_objalloc *objalloc, TYPE *obj) { \
- ngtcp2_mem_free(objalloc->balloc.mem, obj); \
- }
|