/* -*- C++ -*- vim: set syntax=cpp: */
#ifndef __QUEX_INCLUDE_GUARD__MEMORY_MANAGER
#define __QUEX_INCLUDE_GUARD__MEMORY_MANAGER

#include <stddef.h>
#include <quex/code_base/compatibility/stdint.h>
#include <quex/code_base/definitions>

QUEX_NAMESPACE_QUEX_OPEN

typedef enum {
    QUEXED_DEF(MemoryObjectType_BUFFER),
    QUEXED_DEF(MemoryObjectType_BUFFER_FILLER),
    QUEXED_DEF(MemoryObjectType_BUFFER_RAW),
    QUEXED_DEF(MemoryObjectType_CONVERTER),
    QUEXED_DEF(MemoryObjectType_MEMENTO),
    QUEXED_DEF(MemoryObjectType_POST_CATEGORIZER_NODE),
    QUEXED_DEF(MemoryObjectType_TEXT),
    QUEXED_DEF(MemoryObjectType_TOKEN_ARRAY)
} QUEXED_DEF(MemoryObjectType);
 
extern uint8_t*
QUEXED_DEF(MemoryManager_allocate)(const size_t ByteN, 
                                   QUEXED_DEF(MemoryObjectType));

extern void 
QUEXED_DEF(MemoryManager_free)(void* Obj, 
                               QUEXED_DEF(MemoryObjectType));

extern size_t
QUEXED_DEF(MemoryManager_insert)(uint8_t* drain_begin_p,  uint8_t* drain_end_p,
                                 uint8_t* source_begin_p, uint8_t* source_end_p);

QUEX_NAMESPACE_QUEX_CLOSE
 
#endif /* __INCLUDE_GUARD_QUEX__CODE_BASE__MEMORY_MANAGER__ */
