#include #include #include #include template void constructVector_gen(asIScriptGeneric* gen) { new(gen->GetObject()) T(); } template void constructVectorSplat_gen(asIScriptGeneric* gen) { float splat = *(float*)(gen->GetArgAddress(0)); new(gen->GetObject()) T(splat); } template void constructVector_coord_gen(asIScriptGeneric* gen) { new(gen->GetObject()) T(); T* obj = (T*)(gen->GetObject()); for (int i= 0; i < argCount; ++i) { float c = *(float*)(gen->GetArgAddress(i)); obj->d->v[i] = c; } } template void destructVector_gen(asIScriptGeneric* gen) { T* ptr = (T*)(gen->GetObject()); if (ptr) ptr->~T(); } template void copyConstructVector_gen(asIScriptGeneric* gen) { T* a = static_cast(gen->GetArgObject(0)); new(gen->GetObject()) T(*a); } template void copyConstructVector2_gen(asIScriptGeneric* gen) { B* a = static_cast(gen->GetArgObject(0)); new(gen->GetObject()) T(); T* self = (T*)gen->GetObject(); *self->d = *a->d; } template void assignVector_gen(asIScriptGeneric* gen) { T* a = static_cast(gen->GetArgObject(0)); T* self = static_cast(gen->GetObject()); *self = *a; gen->SetReturnAddress(self); } template void addVectors_gen(asIScriptGeneric* gen) { T* lhs = static_cast(gen->GetObject()); T* rhs = static_cast(gen->GetArgObject(0)); *lhs += *rhs; gen->SetReturnAddress(lhs); } template void addVectorFloat_gen(asIScriptGeneric* gen) { T* lhs = static_cast(gen->GetObject()); float rhs = *(float*)(gen->GetArgAddress(0)); *lhs += rhs; gen->SetReturnObject(lhs); } template void addVectorFloat_r_gen(asIScriptGeneric* gen) { T* lhs = static_cast(gen->GetObject()); float rhs = *(float*)(gen->GetArgAddress(0)); *lhs = rhs + *lhs; gen->SetReturnObject(lhs); } template void subVectors_gen(asIScriptGeneric* gen) { T* lhs = static_cast(gen->GetObject()); T* rhs = static_cast(gen->GetArgObject(0)); *lhs -= *rhs; gen->SetReturnAddress(lhs); } template void subVectorFloat_gen(asIScriptGeneric* gen) { T* lhs = static_cast(gen->GetObject()); float rhs = *(float*)(gen->GetArgAddress(0)); *lhs -= rhs; gen->SetReturnObject(lhs); } template void subVectorFloat_r_gen(asIScriptGeneric* gen) { T* lhs = static_cast(gen->GetObject()); float rhs = *(float*)(gen->GetArgAddress(0)); *lhs = rhs - *lhs; gen->SetReturnObject(lhs); } template void mulVectors_gen(asIScriptGeneric* gen) { T* lhs = static_cast(gen->GetObject()); T* rhs = static_cast(gen->GetArgObject(0)); *lhs *= *rhs; gen->SetReturnAddress(lhs); } template void mulVectorFloat_gen(asIScriptGeneric* gen) { T* lhs = static_cast(gen->GetObject()); float rhs = *(float*)(gen->GetArgAddress(0)); *lhs *= rhs; gen->SetReturnObject(lhs); } template void mulVectorFloat_r_gen(asIScriptGeneric* gen) { T* lhs = static_cast(gen->GetObject()); float rhs = *(float*)(gen->GetArgAddress(0)); *lhs = rhs * *lhs; gen->SetReturnObject(lhs); } template void divVectors_gen(asIScriptGeneric* gen) { T* lhs = static_cast(gen->GetObject()); T* rhs = static_cast(gen->GetArgObject(0)); *lhs /= *rhs; gen->SetReturnAddress(lhs); } template void divVectorFloat_gen(asIScriptGeneric* gen) { T* lhs = static_cast(gen->GetObject()); float rhs = *(float*)(gen->GetArgAddress(0)); *lhs /= rhs; gen->SetReturnObject(lhs); } template void divVectorFloat_r_gen(asIScriptGeneric* gen) { T* lhs = static_cast(gen->GetObject()); float rhs = *(float*)(gen->GetArgAddress(0)); *lhs = rhs / *lhs; gen->SetReturnObject(lhs); } template static void getCoord_gen(asIScriptGeneric* gen) { T* lhs = static_cast(gen->GetObject()); float& x = (*lhs)[index]; gen->SetReturnAddress(&x); } template void vectorIsEqual_gen(asIScriptGeneric* gen) { T* lhs = static_cast(gen->GetObject()); T* rhs = static_cast(gen->GetArgObject(0)); *(bool*)(gen->GetAddressOfReturnLocation()) = (*lhs == *rhs); } template void normalizeVec_gen(asIScriptGeneric* gen) { T* lhs = (T*)(gen->GetObject()); lhs->normalize(); } template void normalizedVec_gen(asIScriptGeneric* gen) { T* lhs = (T*)(gen->GetObject()); new(gen->GetAddressOfReturnLocation()) T(lhs->normalized()); } template void isNormalizedVec_gen(asIScriptGeneric* gen) { T* lhs = (T*)(gen->GetObject()); float thresh = *(float*)(gen->GetArgAddress(0)); *(bool*)(gen->GetAddressOfReturnLocation()) = lhs->isNormalized(thresh); }