24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
26 * POSSIBILITY OF SUCH DAMAGE. |
26 * POSSIBILITY OF SUCH DAMAGE. |
27 */ |
27 */ |
28 /** |
28 /** |
29 * \file mempool.h |
29 * @file mempool.h |
30 * \brief Interface for memory pool implementations. |
30 * @brief Interface for memory pool implementations. |
31 * \author Mike Becker |
31 * @author Mike Becker |
32 * \author Olaf Wintermann |
32 * @author Olaf Wintermann |
33 * \copyright 2-Clause BSD License |
33 * @copyright 2-Clause BSD License |
34 */ |
34 */ |
35 |
35 |
36 #ifndef UCX_MEMPOOL_H |
36 #ifndef UCX_MEMPOOL_H |
37 #define UCX_MEMPOOL_H |
37 #define UCX_MEMPOOL_H |
38 |
38 |
87 * |
87 * |
88 * This destructor MUST NOT free the memory. |
88 * This destructor MUST NOT free the memory. |
89 * |
89 * |
90 * @param capacity the initial capacity of the pool |
90 * @param capacity the initial capacity of the pool |
91 * @param destr optional destructor function to use for allocated memory |
91 * @param destr optional destructor function to use for allocated memory |
92 * @return the created memory pool or \c NULL if allocation failed |
92 * @return the created memory pool or @c NULL if allocation failed |
93 */ |
93 */ |
94 cx_attr_nodiscard |
94 cx_attr_nodiscard |
95 cx_attr_malloc |
95 cx_attr_malloc |
96 cx_attr_dealloc(cxMempoolFree, 1) |
96 cx_attr_dealloc(cxMempoolFree, 1) |
97 CxMempool *cxMempoolCreate(size_t capacity, cx_destructor_func destr); |
97 CxMempool *cxMempoolCreate(size_t capacity, cx_destructor_func destr); |
98 |
98 |
99 /** |
99 /** |
100 * Creates a basic array-based memory pool. |
100 * Creates a basic array-based memory pool. |
101 * |
101 * |
102 * @param capacity the initial capacity of the pool |
102 * @param capacity (@c size_t) the initial capacity of the pool |
103 * @return the created memory pool or \c NULL if allocation failed |
103 * @return (@c CxMempool*) the created memory pool or @c NULL if allocation failed |
104 */ |
104 */ |
105 #define cxBasicMempoolCreate(capacity) cxMempoolCreate(capacity, NULL) |
105 #define cxBasicMempoolCreate(capacity) cxMempoolCreate(capacity, NULL) |
106 |
106 |
107 /** |
107 /** |
108 * Sets the destructor function for a specific allocated memory object. |
108 * Sets the destructor function for a specific allocated memory object. |
139 * If that allocation fails, this function will return non-zero. |
139 * If that allocation fails, this function will return non-zero. |
140 * |
140 * |
141 * @param pool the pool |
141 * @param pool the pool |
142 * @param memory the object to register (MUST NOT be already allocated in the pool) |
142 * @param memory the object to register (MUST NOT be already allocated in the pool) |
143 * @param destr the destructor function |
143 * @param destr the destructor function |
144 * @return zero on success, non-zero on failure |
144 * @retval zero success |
|
145 * @retval non-zero failure |
145 */ |
146 */ |
146 cx_attr_nonnull |
147 cx_attr_nonnull |
147 int cxMempoolRegister( |
148 int cxMempoolRegister( |
148 CxMempool *pool, |
149 CxMempool *pool, |
149 void *memory, |
150 void *memory, |