knight/shared/KnightAllocator.h
author Dr!fter
Thu Jul 18 20:34:11 2013 -0400 (2013-07-18)
changeset 3954 f98bbd1892df
parent 2226 d10b38524be3
permissions -rw-r--r--
Add signature offset byte check support for gdc-psyfork (NPOTB).
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_