updated mempoo.h
[charm.git] / src / arch / util / mempool.h
1
2 #ifndef MEMPOOL_H
3 #define MEMPOOL_H  
4
5 #include "conv-config.h"
6
7 #if ! CMK_CONVERSE_GEMINI_UGNI
8   // in uGNI, it is memory handler, other versions, this is an integer
9   // a unique integer to represent the memory block
10 typedef int    gni_mem_handle_t;
11 #endif
12
13 // multiple mempool for different size allocation
14 typedef struct mempool_block_t
15 {
16     void                *mempool_ptr;
17     struct              mempool_block_t *next;
18     gni_mem_handle_t    mem_hndl;
19 } mempool_block;
20
21
22 typedef struct mempool_header
23 {
24   int size;
25   gni_mem_handle_t  mem_hndl;
26   size_t            next_free;
27 } mempool_header;
28
29
30 // only at beginning of first block of mempool
31 typedef struct mempool_type
32 {
33   mempool_block   mempools_head;
34   size_t          freelist_head;
35 } mempool_type;
36
37
38 mempool_type *init_mempool(void *pool, size_t pool_size, gni_mem_handle_t mem_hndl);
39 void kill_allmempool(mempool_type *mptr);
40 void*  mempool_malloc(mempool_type *mptr, int size, int expand);
41 void mempool_free(mempool_type *mptr, void *ptr_free);
42
43 #if defined(__cplusplus)
44 extern "C" {
45 #endif
46
47 #if defined(__cplusplus)
48 }
49 #endif
50
51 #endif /* MEMPOOL.H */