38 lines
798 B
C
38 lines
798 B
C
|
#ifndef _INCLUDE_KNIGHT_ALLOCATOR_H_
|
||
|
#define _INCLUDE_KNIGHT_ALLOCATOR_H_
|
||
|
|
||
|
#include <stddef.h>
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
struct ke_allocator_s;
|
||
|
typedef struct ke_allocator_s ke_allocator_t;
|
||
|
|
||
|
typedef void *(*KEFN_ALLOCATOR)(ke_allocator_t *, size_t);
|
||
|
typedef void (*KEFN_DEALLOCATOR)(ke_allocator_t *, void *);
|
||
|
|
||
|
struct ke_allocator_s
|
||
|
{
|
||
|
KEFN_ALLOCATOR alloc;
|
||
|
KEFN_DEALLOCATOR dealloc;
|
||
|
void *user;
|
||
|
};
|
||
|
|
||
|
inline void *operator new(size_t size, ke_allocator_t *alloc)
|
||
|
{
|
||
|
return alloc->alloc(alloc, size);
|
||
|
}
|
||
|
|
||
|
inline void *operator new [](size_t size, ke_allocator_t *alloc)
|
||
|
{
|
||
|
return alloc->alloc(alloc, size);
|
||
|
}
|
||
|
|
||
|
template <typename T>
|
||
|
void ke_destroy(ke_allocator_t *alloc, T * data)
|
||
|
{
|
||
|
data->~T();
|
||
|
alloc->dealloc(alloc, data);
|
||
|
}
|
||
|
|
||
|
#endif //_INCLUDE_KNIGHT_ALLOCATOR_H_
|