universe@103: /* universe@103: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. olaf@13: * universe@103: * Copyright 2013 Olaf Wintermann. All rights reserved. universe@103: * universe@103: * Redistribution and use in source and binary forms, with or without universe@103: * modification, are permitted provided that the following conditions are met: universe@103: * universe@103: * 1. Redistributions of source code must retain the above copyright universe@103: * notice, this list of conditions and the following disclaimer. universe@103: * universe@103: * 2. Redistributions in binary form must reproduce the above copyright universe@103: * notice, this list of conditions and the following disclaimer in the universe@103: * documentation and/or other materials provided with the distribution. universe@103: * universe@103: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" universe@103: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE universe@103: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE universe@103: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE universe@103: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR universe@103: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF universe@103: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS universe@103: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN universe@103: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) universe@103: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE universe@103: * POSSIBILITY OF SUCH DAMAGE. olaf@13: */ olaf@13: olaf@13: #ifndef MPOOL_H olaf@13: #define MPOOL_H olaf@13: universe@69: #include "ucx.h" universe@38: #include universe@50: #include "allocator.h" universe@38: olaf@13: #ifdef __cplusplus olaf@13: extern "C" { olaf@13: #endif olaf@13: olaf@13: typedef void(*ucx_destructor)(void*); olaf@13: olaf@13: typedef struct { olaf@13: void **data; olaf@13: size_t ndata; olaf@13: size_t size; olaf@13: } UcxMempool; olaf@13: universe@48: olaf@13: #define ucx_mempool_new_default() ucx_mempool_new(16) olaf@13: UcxMempool *ucx_mempool_new(size_t n); universe@15: int ucx_mempool_chcap(UcxMempool *pool, size_t newcap); olaf@13: olaf@13: void *ucx_mempool_malloc(UcxMempool *pool, size_t n); olaf@13: void *ucx_mempool_calloc(UcxMempool *pool, size_t nelem, size_t elsize); olaf@13: void *ucx_mempool_realloc(UcxMempool *pool, void *ptr, size_t n); olaf@113: void ucx_mempool_free(UcxMempool *pool, void *ptr); olaf@13: olaf@113: void ucx_mempool_destroy(UcxMempool *pool); olaf@13: olaf@13: void ucx_mempool_set_destr(void *ptr, ucx_destructor func); olaf@13: void ucx_mempool_reg_destr(UcxMempool *pool, void *ptr, ucx_destructor destr); olaf@13: olaf@113: UcxAllocator* ucx_mempool_allocator(UcxMempool *pool); olaf@13: olaf@13: #ifdef __cplusplus olaf@13: } olaf@13: #endif olaf@13: olaf@13: #endif /* MPOOL_H */ olaf@13: