28 #if !defined(_SCRAT_ALLOCATOR_H_) 
   29 #define _SCRAT_ALLOCATOR_H_ 
   34 #include "sqratObject.h" 
   35 #include "sqratTypes.h" 
   45 class is_default_constructible {
 
   50     static int sfinae( receive_size< 
sizeof U() > * );
 
   53     static char sfinae( ... );
 
   56     enum { value = 
sizeof( sfinae<T>(0) ) == 
sizeof(int) };
 
   72     static void setInstance(HSQUIRRELVM vm, C* instance)
 
   74         sq_setinstanceup(vm, 1, instance);
 
   75         sq_setreleasehook(vm, 1, &Delete);
 
   78     template <
class T, 
bool b>
 
  108     static SQInteger 
New(HSQUIRRELVM vm) {
 
  109         C* instance = NewC<C, is_default_constructible<C>::value >().p;
 
  110         setInstance(vm, instance);
 
  119     static SQInteger iNew(HSQUIRRELVM vm) {
 
  123     template <
typename A1>
 
  124     static SQInteger iNew(HSQUIRRELVM vm) {
 
  128             setInstance(vm, 
new C(
 
  134     template <
typename A1,
typename A2>
 
  135     static SQInteger iNew(HSQUIRRELVM vm) {
 
  140             setInstance(vm, 
new C(
 
  147     template <
typename A1,
typename A2,
typename A3>
 
  148     static SQInteger iNew(HSQUIRRELVM vm) {
 
  154             setInstance(vm, 
new C(
 
  162     template <
typename A1,
typename A2,
typename A3,
typename A4>
 
  163     static SQInteger iNew(HSQUIRRELVM vm) {
 
  170             setInstance(vm, 
new C(
 
  179     template <
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
 
  180     static SQInteger iNew(HSQUIRRELVM vm) {
 
  188             setInstance(vm, 
new C(
 
  198     template <
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
 
  199     static SQInteger iNew(HSQUIRRELVM vm) {
 
  208             setInstance(vm, 
new C(
 
  219     template <
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
 
  220     static SQInteger iNew(HSQUIRRELVM vm) {
 
  230             setInstance(vm, 
new C(
 
  242     template <
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
 
  243     static SQInteger iNew(HSQUIRRELVM vm) {
 
  254             setInstance(vm, 
new C(
 
  267     template <
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9>
 
  268     static SQInteger iNew(HSQUIRRELVM vm) {
 
  280             setInstance(vm, 
new C(
 
  308     static SQInteger 
Copy(HSQUIRRELVM vm, SQInteger idx, 
const void* value) {
 
  309         C* instance = 
new C(*static_cast<const C*>(value));
 
  310         sq_setinstanceup(vm, idx, instance);
 
  311         sq_setreleasehook(vm, idx, &Delete);
 
  324     static SQInteger 
Delete(SQUserPointer ptr, SQInteger size) {
 
  326         C* instance = 
reinterpret_cast<C*
>(ptr);
 
  350     static SQInteger 
New(HSQUIRRELVM vm) {
 
  351 #if !defined (SCRAT_NO_ERROR_CHECKING) 
  352         return sq_throwerror(vm, (ClassType<C>::ClassName(vm) + 
string(_SC(
" constructing is not allowed"))).c_str());
 
  369     static SQInteger 
Copy(HSQUIRRELVM vm, SQInteger idx, 
const void* value) {
 
  385     static SQInteger 
Delete(SQUserPointer ptr, SQInteger size) {
 
  410     static SQInteger 
New(HSQUIRRELVM vm) {
 
  411 #if !defined (SCRAT_NO_ERROR_CHECKING) 
  412         return sq_throwerror(vm, (ClassType<C>::ClassName(vm) + 
string(_SC(
" constructing is not allowed"))).c_str());
 
  429     static SQInteger 
Copy(HSQUIRRELVM vm, SQInteger idx, 
const void* value) {
 
  430         C* instance = 
new C(*static_cast<const C*>(value));
 
  431         sq_setinstanceup(vm, idx, instance);
 
  432         sq_setreleasehook(vm, idx, &Delete);
 
  445     static SQInteger 
Delete(SQUserPointer ptr, SQInteger size) {
 
  447         C* instance = 
reinterpret_cast<C*
>(ptr);
 
  466     static void setInstance(HSQUIRRELVM vm, C* instance)
 
  468         sq_setinstanceup(vm, 1, instance);
 
  469         sq_setreleasehook(vm, 1, &Delete);
 
  472     template <
class T, 
bool b>
 
  483     struct NewC<T, false>
 
  502     static SQInteger 
New(HSQUIRRELVM vm) {
 
  503         C* instance = NewC<C, is_default_constructible<C>::value >().p;
 
  504         setInstance(vm, instance);
 
  513     static SQInteger iNew(HSQUIRRELVM vm) {
 
  517     template <
typename A1>
 
  518     static SQInteger iNew(HSQUIRRELVM vm) {
 
  522             setInstance(vm, 
new C(
 
  528     template <
typename A1,
typename A2>
 
  529     static SQInteger iNew(HSQUIRRELVM vm) {
 
  534             setInstance(vm, 
new C(
 
  541     template <
typename A1,
typename A2,
typename A3>
 
  542     static SQInteger iNew(HSQUIRRELVM vm) {
 
  548             setInstance(vm, 
new C(
 
  556     template <
typename A1,
typename A2,
typename A3,
typename A4>
 
  557     static SQInteger iNew(HSQUIRRELVM vm) {
 
  564             setInstance(vm, 
new C(
 
  573     template <
typename A1,
typename A2,
typename A3,
typename A4,
typename A5>
 
  574     static SQInteger iNew(HSQUIRRELVM vm) {
 
  582             setInstance(vm, 
new C(
 
  592     template <
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6>
 
  593     static SQInteger iNew(HSQUIRRELVM vm) {
 
  602             setInstance(vm, 
new C(
 
  613     template <
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7>
 
  614     static SQInteger iNew(HSQUIRRELVM vm) {
 
  624             setInstance(vm, 
new C(
 
  636     template <
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8>
 
  637     static SQInteger iNew(HSQUIRRELVM vm) {
 
  648             setInstance(vm, 
new C(
 
  661     template <
typename A1,
typename A2,
typename A3,
typename A4,
typename A5,
typename A6,
typename A7,
typename A8,
typename A9>
 
  662     static SQInteger iNew(HSQUIRRELVM vm) {
 
  674             setInstance(vm, 
new C(
 
  700     static SQInteger 
Copy(HSQUIRRELVM vm, SQInteger idx, 
const void* value) {
 
  716     static SQInteger 
Delete(SQUserPointer ptr, SQInteger size) {
 
  718         C* instance = 
reinterpret_cast<C*
>(ptr);
 
static SQInteger Delete(SQUserPointer ptr, SQInteger size)
Definition: sqratAllocator.h:385
 
Definition: sqratAllocator.h:70
 
Definition: sqratAllocator.h:399
 
static SQInteger Delete(SQUserPointer ptr, SQInteger size)
Definition: sqratAllocator.h:324
 
static SQInteger Copy(HSQUIRRELVM vm, SQInteger idx, const void *value)
Definition: sqratAllocator.h:308
 
static SQInteger New(HSQUIRRELVM vm)
Definition: sqratAllocator.h:502
 
static SQInteger New(HSQUIRRELVM vm)
Definition: sqratAllocator.h:410
 
static SQInteger Copy(HSQUIRRELVM vm, SQInteger idx, const void *value)
Definition: sqratAllocator.h:700
 
static Error & Instance()
Definition: sqratUtil.h:134
 
Definition: sqratAllocator.h:464
 
static SQInteger Delete(SQUserPointer ptr, SQInteger size)
Definition: sqratAllocator.h:716
 
static SQInteger New(HSQUIRRELVM vm)
Definition: sqratAllocator.h:108
 
Definition: sqratAllocator.h:339
 
static SQInteger Copy(HSQUIRRELVM vm, SQInteger idx, const void *value)
Definition: sqratAllocator.h:369
 
static SQInteger New(HSQUIRRELVM vm)
Definition: sqratAllocator.h:350
 
static SQInteger Delete(SQUserPointer ptr, SQInteger size)
Definition: sqratAllocator.h:445
 
static SQInteger Copy(HSQUIRRELVM vm, SQInteger idx, const void *value)
Definition: sqratAllocator.h:429