188a360acSJiří Techet /* 288a360acSJiří Techet * Copyright (c) 2016, Jiri Techet 388a360acSJiří Techet * 488a360acSJiří Techet * This source code is released for free distribution under the terms of the 588a360acSJiří Techet * GNU General Public License version 2 or (at your option) any later version. 688a360acSJiří Techet * 788a360acSJiří Techet * Defines generic pool for object reuse reducing the amount of allocations 888a360acSJiří Techet * and deallocations. 988a360acSJiří Techet */ 1088a360acSJiří Techet #ifndef CTAGS_MAIN_OBJPOOL_H 1188a360acSJiří Techet #define CTAGS_MAIN_OBJPOOL_H 1288a360acSJiří Techet 1388a360acSJiří Techet /* 1488a360acSJiří Techet * INCLUDE FILES 1588a360acSJiří Techet */ 1688a360acSJiří Techet #include "general.h" /* must always come first */ 1788a360acSJiří Techet 1888a360acSJiří Techet #include "ptrarray.h" 1988a360acSJiří Techet 2088a360acSJiří Techet /* 2188a360acSJiří Techet * DATA DECLARATIONS 2288a360acSJiří Techet */ 23*e013efc1SMasatake YAMATO typedef void * (*objPoolCreateFunc) (void *createArg); 2488a360acSJiří Techet typedef void (*objPoolDeleteFunc) (void *data); 2588a360acSJiří Techet typedef void (*objPoolClearFunc) (void *data); 2688a360acSJiří Techet 2788a360acSJiří Techet struct sObjPool; 2888a360acSJiří Techet typedef struct sObjPool objPool; 2988a360acSJiří Techet 3088a360acSJiří Techet /* 3188a360acSJiří Techet * FUNCTION PROTOTYPES 3288a360acSJiří Techet */ 3388a360acSJiří Techet extern objPool *objPoolNew (unsigned int size, 34*e013efc1SMasatake YAMATO objPoolCreateFunc createFunc, objPoolDeleteFunc deleteFunc, objPoolClearFunc clearFunc, 35*e013efc1SMasatake YAMATO void *createArg); 3688a360acSJiří Techet extern void objPoolDelete (objPool *pool); 3788a360acSJiří Techet extern void *objPoolGet (objPool *pool); 3888a360acSJiří Techet extern void objPoolPut (objPool *pool, void *obj); 3988a360acSJiří Techet 4088a360acSJiří Techet #endif /* CTAGS_MAIN_OBJPOOL_H */ 41