knight/shared/KnightAllocator.h
author Nicholas Hastings <skamonkey@gmail.com>
Wed May 25 13:31:14 2011 -0400 (2011-05-25)
changeset 3285 065beec73902
parent 2226 d10b38524be3
permissions -rw-r--r--
Backed out changeset: 65eb3df32b1c
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_