| author | Nicholas Hastings <skamonkey@gmail.com> |
| Wed Oct 09 08:43:08 2013 -0400 (2013-10-09) | |
| changeset 4138 | da768ad428cf |
| parent 2226 | d10b38524be3 |
| permissions | -rw-r--r-- |
| dvander@2226 | 1 |
#ifndef _INCLUDE_KNIGHT_ALLOCATOR_H_ |
| dvander@2226 | 2 |
#define _INCLUDE_KNIGHT_ALLOCATOR_H_ |
| dvander@2226 | 3 |
|
| dvander@2226 | 4 |
#include <stddef.h> |
| dvander@2226 | 5 |
#include <stdlib.h> |
| dvander@2226 | 6 |
|
| dvander@2226 | 7 |
struct ke_allocator_s; |
| dvander@2226 | 8 |
typedef struct ke_allocator_s ke_allocator_t; |
| dvander@2226 | 9 |
|
| dvander@2226 | 10 |
typedef void *(*KEFN_ALLOCATOR)(ke_allocator_t *, size_t); |
| dvander@2226 | 11 |
typedef void (*KEFN_DEALLOCATOR)(ke_allocator_t *, void *); |
| dvander@2226 | 12 |
|
| dvander@2226 | 13 |
struct ke_allocator_s |
| dvander@2226 | 14 |
{ |
| dvander@2226 | 15 |
KEFN_ALLOCATOR alloc; |
| dvander@2226 | 16 |
KEFN_DEALLOCATOR dealloc; |
| dvander@2226 | 17 |
void *user; |
| dvander@2226 | 18 |
}; |
| dvander@2226 | 19 |
|
| dvander@2226 | 20 |
inline void *operator new(size_t size, ke_allocator_t *alloc) |
| dvander@2226 | 21 |
{ |
| dvander@2226 | 22 |
return alloc->alloc(alloc, size); |
| dvander@2226 | 23 |
} |
| dvander@2226 | 24 |
|
| dvander@2226 | 25 |
inline void *operator new [](size_t size, ke_allocator_t *alloc) |
| dvander@2226 | 26 |
{ |
| dvander@2226 | 27 |
return alloc->alloc(alloc, size); |
| dvander@2226 | 28 |
} |
| dvander@2226 | 29 |
|
| dvander@2226 | 30 |
template <typename T> |
| dvander@2226 | 31 |
void ke_destroy(ke_allocator_t *alloc, T * data) |
| dvander@2226 | 32 |
{ |
| dvander@2226 | 33 |
data->~T(); |
| dvander@2226 | 34 |
alloc->dealloc(alloc, data); |
| dvander@2226 | 35 |
} |
| dvander@2226 | 36 |
|
| dvander@2226 | 37 |
#endif //_INCLUDE_KNIGHT_ALLOCATOR_H_ |