/************************************************************************** * * Copyright 2008-2018 by Andrey Butok. FNET Community. * *************************************************************************** * * Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *************************************************************************** * * FNET memory pools API. * ***************************************************************************/ #ifndef _FNET_MEMPOOL_H_ #define _FNET_MEMPOOL_H_ /**************************************************************************/ /*! * @internal * @brief Memory pool descriptor. * @see _fnet_mempool_init() ******************************************************************************/ typedef fnet_int32_t fnet_mempool_desc_t; /* Memory pool unit header.*/ FNET_COMP_PACKED_BEGIN typedef struct fnet_mempool_unit_header { fnet_size_t size FNET_COMP_PACKED; /* Unit size. */ struct fnet_mempool_unit_header *ptr FNET_COMP_PACKED; /* Pointer to the next free block. */ } fnet_mempool_unit_header_t; FNET_COMP_PACKED_END typedef enum { FNET_MEMPOOL_ALIGN_8 = (8u), /* Evenly divisible by 8.*/ FNET_MEMPOOL_ALIGN_16 = (16u), /* Evenly divisible by 16.*/ FNET_MEMPOOL_ALIGN_32 = (32u), /* Evenly divisible by 32.*/ FNET_MEMPOOL_ALIGN_64 = (64u) /* Evenly divisible by 64.*/ } fnet_mempool_align_t; #if defined(__cplusplus) extern "C" { #endif fnet_mempool_desc_t _fnet_mempool_init( void *pool_ptr, fnet_size_t pool_size, fnet_mempool_align_t alignment ); void _fnet_mempool_release( fnet_mempool_desc_t mpool ); void _fnet_mempool_free( fnet_mempool_desc_t mpool, void *ap ); void *_fnet_mempool_malloc(fnet_mempool_desc_t mpool, fnet_size_t nbytes ); fnet_size_t _fnet_mempool_free_mem_status( fnet_mempool_desc_t mpool); fnet_size_t _fnet_mempool_malloc_max( fnet_mempool_desc_t mpool ); #if 0 /* For Debug needs.*/ fnet_return_t _fnet_mempool_check( fnet_mempool_desc_t mpool ); #endif #if defined(__cplusplus) } #endif #endif