lwpa  0.1.0
LightWeight Platform Abstraction (lwpa)
View other versions:
lwpa_mempool.h
1 /******************************************************************************
2  * Copyright 2018 ETC Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *******************************************************************************
16  * This file is a part of lwpa. For more information, go to:
17  * https://github.com/ETCLabs/lwpa
18  ******************************************************************************/
19 
20 /* lwpa_mempool.h: Fixed-size memory pools. */
21 #ifndef _LWPA_MEMPOOL_H_
22 #define _LWPA_MEMPOOL_H_
23 
24 #include <stddef.h>
25 #include "lwpa_error.h"
26 
43 typedef struct LwpaMempool LwpaMempool;
45 {
46  LwpaMempool *next;
47 };
48 
52 typedef struct LwpaMempoolDesc
53 {
54  const size_t elem_size;
55  const size_t pool_size;
57  LwpaMempool *const list;
59  size_t current_used;
60  void *const pool;
62 
70 #define LWPA_MEMPOOL_DECLARE(name) extern LwpaMempoolDesc name##_pool_desc;
71 
84 #define LWPA_MEMPOOL_DEFINE(name, type, size) \
85  type name##_pool[size]; \
86  struct LwpaMempool name##_pool_list[size]; \
87  struct LwpaMempoolDesc name##_pool_desc = {sizeof(type), /* elem_size */ \
88  size, /* pool_size */ \
89  NULL, /* freelist */ \
90  name##_pool_list, /* list */ \
91  0, /* current_used */ \
92  name##_pool /* pool */}
93 
105 #define lwpa_mempool_init(name) lwpa_mempool_init_priv(&name##_pool_desc)
106 
113 #define lwpa_mempool_alloc(name) lwpa_mempool_alloc_priv(&name##_pool_desc)
114 
124 #define lwpa_mempool_free(name, mem) lwpa_mempool_free_priv(&name##_pool_desc, mem)
125 
134 #define lwpa_mempool_size(name) (name##_pool_desc.pool_size)
135 
140 #define lwpa_mempool_used(name) lwpa_mempool_used_priv(&name##_pool_desc)
141 
142 #ifdef __cplusplus
143 extern "C" {
144 #endif
145 
146 lwpa_error_t lwpa_mempool_init_priv(LwpaMempoolDesc *desc);
147 void *lwpa_mempool_alloc_priv(LwpaMempoolDesc *desc);
148 void lwpa_mempool_free_priv(LwpaMempoolDesc *desc, void *elem);
149 size_t lwpa_mempool_used_priv(LwpaMempoolDesc *desc);
150 
151 #ifdef __cplusplus
152 }
153 #endif
154 
157 #endif /* _LWPA_MEMPOOL_H_ */
lwpa_error_t
A set of error codes that can be returned by library functions.
Definition: lwpa_error.h:37
struct LwpaMempoolDesc LwpaMempoolDesc
(Not for direct usage) A memory pool description structure.
(Not for direct usage) A memory pool description structure.
Definition: lwpa_mempool.h:53
const size_t elem_size
The size of each element.
Definition: lwpa_mempool.h:54
const size_t pool_size
The number of elements in the pool.
Definition: lwpa_mempool.h:55
LwpaMempool *const list
The array of mempool list structs.
Definition: lwpa_mempool.h:57
void *const pool
The actual pool memory.
Definition: lwpa_mempool.h:60
LwpaMempool * freelist
The current freelist.
Definition: lwpa_mempool.h:56
size_t current_used
The number of pool elements that have currently been allocated.
Definition: lwpa_mempool.h:59
Definition: lwpa_mempool.h:45