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