// see license file for original license.

#ifndef tools_glutess_memalloc
#define tools_glutess_memalloc

////////////////////////////////////////////////////////
/// inlined C code : ///////////////////////////////////
////////////////////////////////////////////////////////

#ifdef TOOLS_MEM
#include "../mem"
#include <cstdlib>
namespace tools {
inline void* mem_alloc(size_t a_size){
  mem::increment(tools::s_malloc().c_str());
  return ::malloc(a_size);
}
inline void* mem_realloc(void* a_ptr,size_t a_size){
  if(a_ptr==NULL) mem::increment(tools::s_malloc().c_str());
  return ::realloc(a_ptr,a_size);
}
inline void mem_free(void* a_ptr){
  if(a_ptr!=NULL) mem::decrement(tools::s_malloc().c_str());
  ::free(a_ptr);
}
inline int mem_init( size_t /*maxFast*/) {return 1;}

}
#else
#include <cstdlib>
#include <cstring>
namespace tools {
inline void* mem_alloc(size_t a_size) {return ::memset( ::malloc( a_size ), 0xa5, a_size);}
inline void* mem_realloc(void* a_ptr,size_t a_size){return ::realloc(a_ptr,a_size);}
inline void mem_free(void* a_ptr){::free(a_ptr);}
inline int mem_init( size_t /*maxFast*/) {return 1;}
}
#endif

#define memAlloc	tools::mem_alloc
#define memRealloc	tools::mem_realloc
#define memFree		tools::mem_free
#define memInit		tools::mem_init

#endif
