|
@@ -3,197 +3,62 @@
|
|
|
|
|
|
#include "core/Types.h"
|
|
|
|
|
|
-#define CORE_VECTOR_OP2(name) name *r, const name *a
|
|
|
-#define CORE_VECTOR_OP3(name) CORE_VECTOR_OP2(name), const name* b
|
|
|
+#define VECTOR_OP2(name) name *r, const name *a
|
|
|
+#define VECTOR_OP3(name) VECTOR_OP2(name), const name* b
|
|
|
|
|
|
-#define CORE_DEFINE_VECTOR(N, name, sname, type) \
|
|
|
+#define DEFINE_VECTOR(N, name, sname, type) \
|
|
|
typedef struct { \
|
|
|
type data[N]; \
|
|
|
} name; \
|
|
|
- name* coreAddSet##sname(CORE_VECTOR_OP2(name)); \
|
|
|
- name* coreAdd##sname(CORE_VECTOR_OP3(name)); \
|
|
|
- name* coreSubSet##sname(CORE_VECTOR_OP2(name)); \
|
|
|
- name* coreSub##sname(CORE_VECTOR_OP3(name)); \
|
|
|
- name* coreMulSet##sname(CORE_VECTOR_OP2(name)); \
|
|
|
- name* coreMul##sname(CORE_VECTOR_OP3(name)); \
|
|
|
- name* coreDivSet##sname(CORE_VECTOR_OP2(name)); \
|
|
|
- name* coreDiv##sname(CORE_VECTOR_OP3(name)); \
|
|
|
- name* coreMulSet##sname##F(name* r, type f); \
|
|
|
- name* coreMul##sname##F(name* r, const name* a, type f); \
|
|
|
- name* coreDivSet##sname##F(name* r, type f); \
|
|
|
- name* coreDiv##sname##F(name* r, const name* a, type f); \
|
|
|
- name* coreInvertSet##sname(name* r); \
|
|
|
- name* coreInvert##sname(name* r, const name* a); \
|
|
|
- size_t coreToString##sname(const name* a, char* buffer, size_t n);
|
|
|
-
|
|
|
-#define CORE_DEFINE_FVECTOR(N, name) \
|
|
|
- float coreDotV##N(const name* a, const name* b); \
|
|
|
- float coreSquareLengthV##N(const name* a); \
|
|
|
- float coreLengthV##N(const name* a); \
|
|
|
- name* coreNormalizeV##N(name* r);
|
|
|
-
|
|
|
-CORE_DEFINE_VECTOR(2, CoreVector2, V2, float)
|
|
|
-CORE_DEFINE_VECTOR(3, CoreVector3, V3, float)
|
|
|
-CORE_DEFINE_VECTOR(4, CoreVector4, V4, float)
|
|
|
-CORE_DEFINE_FVECTOR(2, CoreVector2)
|
|
|
-CORE_DEFINE_FVECTOR(3, CoreVector3)
|
|
|
-CORE_DEFINE_FVECTOR(4, CoreVector4)
|
|
|
-CORE_DEFINE_VECTOR(2, CoreIntVector2, IV2, int)
|
|
|
-CORE_DEFINE_VECTOR(3, CoreIntVector3, IV3, int)
|
|
|
-CORE_DEFINE_VECTOR(4, CoreIntVector4, IV4, int)
|
|
|
-
|
|
|
-CoreVector3* coreAngles(CoreVector3* r, float lengthAngle, float widthAngle);
|
|
|
-CoreVector3* coreCross(CORE_VECTOR_OP3(CoreVector3));
|
|
|
-
|
|
|
-#define CORE_DEFINE_VECTOR_CONVERSION(a, nameA, b, nameB) \
|
|
|
- a* coreConvert##nameB(a* r, const b* c); \
|
|
|
- b* coreConvert##nameA(b* r, const a* c)
|
|
|
-
|
|
|
-CORE_DEFINE_VECTOR_CONVERSION(CoreVector2, V2, CoreIntVector2, IV2);
|
|
|
-CORE_DEFINE_VECTOR_CONVERSION(CoreVector3, V3, CoreIntVector3, IV3);
|
|
|
-CORE_DEFINE_VECTOR_CONVERSION(CoreVector4, V4, CoreIntVector4, IV4);
|
|
|
-
|
|
|
-#define CORE_VECTOR2 ((CoreVector2){0})
|
|
|
-#define CORE_VECTOR3 ((CoreVector3){0})
|
|
|
-#define CORE_VECTOR4 ((CoreVector4){0})
|
|
|
-#define CORE_INT_VECTOR2 ((CoreIntVector2){0})
|
|
|
-#define CORE_INT_VECTOR3 ((CoreIntVector3){0})
|
|
|
-#define CORE_INT_VECTOR4 ((CoreIntVector4){0})
|
|
|
-
|
|
|
-#ifdef IMPORT_CORE
|
|
|
-#define Vector2 CoreVector2
|
|
|
-#define addSetV2 coreAddSetV2
|
|
|
-#define addV2 coreAddV2
|
|
|
-#define subSetV2 coreSubSetV2
|
|
|
-#define subV2 coreSubV2
|
|
|
-#define mulSetV2 coreMulSetV2
|
|
|
-#define mulV2 coreMulV2
|
|
|
-#define divSetV2 coreDivSetV2
|
|
|
-#define divV2 coreDivV2
|
|
|
-#define mulSetV2F coreMulSetV2F
|
|
|
-#define mulV2F coreMulV2F
|
|
|
-#define divSetV2F coreDivSetV2F
|
|
|
-#define divV2F coreDivV2F
|
|
|
-#define invertSetV2 coreInvertSetV2
|
|
|
-#define invertV2 coreInvertV2
|
|
|
-#define toStringV2 coreToStringV2
|
|
|
-
|
|
|
-#define Vector3 CoreVector3
|
|
|
-#define addSetV3 coreAddSetV3
|
|
|
-#define addV3 coreAddV3
|
|
|
-#define subSetV3 coreSubSetV3
|
|
|
-#define subV3 coreSubV3
|
|
|
-#define mulSetV3 coreMulSetV3
|
|
|
-#define mulV3 coreMulV3
|
|
|
-#define divSetV3 coreDivSetV3
|
|
|
-#define divV3 coreDivV3
|
|
|
-#define mulSetV3F coreMulSetV3F
|
|
|
-#define mulV3F coreMulV3F
|
|
|
-#define divSetV3F coreDivSetV3F
|
|
|
-#define divV3F coreDivV3F
|
|
|
-#define invertSetV3 coreInvertSetV3
|
|
|
-#define invertV3 coreInvertV3
|
|
|
-#define toStringV3 coreToStringV3
|
|
|
-
|
|
|
-#define Vector4 CoreVector4
|
|
|
-#define addSetV4 coreAddSetV4
|
|
|
-#define addV4 coreAddV4
|
|
|
-#define subSetV4 coreSubSetV4
|
|
|
-#define subV4 coreSubV4
|
|
|
-#define mulSetV4 coreMulSetV4
|
|
|
-#define mulV4 coreMulV4
|
|
|
-#define divSetV4 coreDivSetV4
|
|
|
-#define divV4 coreDivV4
|
|
|
-#define mulSetV4F coreMulSetV4F
|
|
|
-#define mulV4F coreMulV4F
|
|
|
-#define divSetV4F coreDivSetV4F
|
|
|
-#define divV4F coreDivV4F
|
|
|
-#define invertSetV4 coreInvertSetV4
|
|
|
-#define invertV4 coreInvertV4
|
|
|
-#define toStringV4 coreToStringV4
|
|
|
-
|
|
|
-#define IntVector2 CoreIntVector2
|
|
|
-#define addSetIV2 coreAddSetIV2
|
|
|
-#define addIV2 coreAddIV2
|
|
|
-#define subSetIV2 coreSubSetIV2
|
|
|
-#define subIV2 coreSubIV2
|
|
|
-#define mulSetIV2 coreMulSetIV2
|
|
|
-#define mulIV2 coreMulIV2
|
|
|
-#define divSetIV2 coreDivSetIV2
|
|
|
-#define divIV2 coreDivIV2
|
|
|
-#define mulSetIV2F coreMulSetIV2F
|
|
|
-#define mulIV2F coreMulIV2F
|
|
|
-#define divSetIV2F coreDivSetIV2F
|
|
|
-#define divIV2F coreDivIV2F
|
|
|
-#define invertSetIV2 coreInvertSetIV2
|
|
|
-#define invertIV2 coreInvertIV2
|
|
|
-#define toStringIV2 coreToStringIV2
|
|
|
-
|
|
|
-#define IntVector3 CoreIntVector3
|
|
|
-#define addSetIV3 coreAddSetIV3
|
|
|
-#define addIV3 coreAddIV3
|
|
|
-#define subSetIV3 coreSubSetIV3
|
|
|
-#define subIV3 coreSubIV3
|
|
|
-#define mulSetIV3 coreMulSetIV3
|
|
|
-#define mulIV3 coreMulIV3
|
|
|
-#define divSetIV3 coreDivSetIV3
|
|
|
-#define divIV3 coreDivIV3
|
|
|
-#define mulSetIV3F coreMulSetIV3F
|
|
|
-#define mulIV3F coreMulIV3F
|
|
|
-#define divSetIV3F coreDivSetIV3F
|
|
|
-#define divIV3F coreDivIV3F
|
|
|
-#define invertSetIV3 coreInvertSetIV3
|
|
|
-#define invertIV3 coreInvertIV3
|
|
|
-#define toStringIV3 coreToStringIV3
|
|
|
-
|
|
|
-#define IntVector4 CoreIntVector4
|
|
|
-#define addSetIV4 coreAddSetIV4
|
|
|
-#define addIV4 coreAddIV4
|
|
|
-#define subSetIV4 coreSubSetIV4
|
|
|
-#define subIV4 coreSubIV4
|
|
|
-#define mulSetIV4 coreMulSetIV4
|
|
|
-#define mulIV4 coreMulIV4
|
|
|
-#define divSetIV4 coreDivSetIV4
|
|
|
-#define divIV4 coreDivIV4
|
|
|
-#define mulSetIV4F coreMulSetIV4F
|
|
|
-#define mulIV4F coreMulIV4F
|
|
|
-#define divSetIV4F coreDivSetIV4F
|
|
|
-#define divIV4F coreDivIV4F
|
|
|
-#define invertSetIV4 coreInvertSetIV4
|
|
|
-#define invertIV4 coreInvertIV4
|
|
|
-#define toStringIV4 coreToStringIV4
|
|
|
-
|
|
|
-#define dotV2 coreDotV2
|
|
|
-#define squareLengthV2 coreSquareLengthV2
|
|
|
-#define lengthV2 coreLengthV2
|
|
|
-#define normalizeV2 coreNormalizeV2
|
|
|
-
|
|
|
-#define dotV3 coreDotV3
|
|
|
-#define squareLengthV3 coreSquareLengthV3
|
|
|
-#define lengthV3 coreLengthV3
|
|
|
-#define normalizeV3 coreNormalizeV3
|
|
|
-
|
|
|
-#define dotV4 coreDotV4
|
|
|
-#define squareLengthV4 coreSquareLengthV4
|
|
|
-#define lengthV4 coreLengthV4
|
|
|
-#define normalizeV4 coreNormalizeV4
|
|
|
-
|
|
|
-#define angles coreAngles
|
|
|
-#define cross coreCross
|
|
|
-
|
|
|
-#define convertV2 coreConvertV2
|
|
|
-#define convertIV2 coreConvertIV2
|
|
|
-#define convertV3 coreConvertV3
|
|
|
-#define convertIV3 coreConvertIV3
|
|
|
-#define convertV4 coreConvertV4
|
|
|
-#define convertIV4 coreConvertIV4
|
|
|
-
|
|
|
-#define VECTOR2 CORE_VECTOR2
|
|
|
-#define VECTOR3 CORE_VECTOR3
|
|
|
-#define VECTOR4 CORE_VECTOR4
|
|
|
-#define INT_VECTOR2 CORE_INT_VECTOR2
|
|
|
-#define INT_VECTOR3 CORE_INT_VECTOR3
|
|
|
-#define INT_VECTOR4 CORE_INT_VECTOR4
|
|
|
+ name* addSet##sname(VECTOR_OP2(name)); \
|
|
|
+ name* add##sname(VECTOR_OP3(name)); \
|
|
|
+ name* subSet##sname(VECTOR_OP2(name)); \
|
|
|
+ name* sub##sname(VECTOR_OP3(name)); \
|
|
|
+ name* mulSet##sname(VECTOR_OP2(name)); \
|
|
|
+ name* mul##sname(VECTOR_OP3(name)); \
|
|
|
+ name* divSet##sname(VECTOR_OP2(name)); \
|
|
|
+ name* div##sname(VECTOR_OP3(name)); \
|
|
|
+ name* mulSet##sname##F(name* r, type f); \
|
|
|
+ name* mul##sname##F(name* r, const name* a, type f); \
|
|
|
+ name* divSet##sname##F(name* r, type f); \
|
|
|
+ name* div##sname##F(name* r, const name* a, type f); \
|
|
|
+ name* invertSet##sname(name* r); \
|
|
|
+ name* invert##sname(name* r, const name* a); \
|
|
|
+ size_t toString##sname(const name* a, char* buffer, size_t n);
|
|
|
+
|
|
|
+#define DEFINE_FVECTOR(N, name) \
|
|
|
+ float dotV##N(const name* a, const name* b); \
|
|
|
+ float squareLengthV##N(const name* a); \
|
|
|
+ float lengthV##N(const name* a); \
|
|
|
+ name* normalizeV##N(name* r);
|
|
|
+
|
|
|
+DEFINE_VECTOR(2, Vector2, V2, float)
|
|
|
+DEFINE_VECTOR(3, Vector3, V3, float)
|
|
|
+DEFINE_VECTOR(4, Vector4, V4, float)
|
|
|
+DEFINE_FVECTOR(2, Vector2)
|
|
|
+DEFINE_FVECTOR(3, Vector3)
|
|
|
+DEFINE_FVECTOR(4, Vector4)
|
|
|
+DEFINE_VECTOR(2, IntVector2, IV2, int)
|
|
|
+DEFINE_VECTOR(3, IntVector3, IV3, int)
|
|
|
+DEFINE_VECTOR(4, IntVector4, IV4, int)
|
|
|
+
|
|
|
+Vector3* angles(Vector3* r, float lengthAngle, float widthAngle);
|
|
|
+Vector3* cross(VECTOR_OP3(Vector3));
|
|
|
+
|
|
|
+#define DEFINE_VECTOR_CONVERSION(a, nameA, b, nameB) \
|
|
|
+ a* convert##nameB(a* r, const b* c); \
|
|
|
+ b* convert##nameA(b* r, const a* c)
|
|
|
+
|
|
|
+DEFINE_VECTOR_CONVERSION(Vector2, V2, IntVector2, IV2);
|
|
|
+DEFINE_VECTOR_CONVERSION(Vector3, V3, IntVector3, IV3);
|
|
|
+DEFINE_VECTOR_CONVERSION(Vector4, V4, IntVector4, IV4);
|
|
|
+
|
|
|
+#define VECTOR2 ((Vector2){0})
|
|
|
+#define VECTOR3 ((Vector3){0})
|
|
|
+#define VECTOR4 ((Vector4){0})
|
|
|
+#define INT_VECTOR2 ((IntVector2){0})
|
|
|
+#define INT_VECTOR3 ((IntVector3){0})
|
|
|
+#define INT_VECTOR4 ((IntVector4){0})
|
|
|
|
|
|
#define SELECT_VECTOR(_1, _2, _3, _4, name, ...) name
|
|
|
#define V(...) \
|
|
@@ -203,5 +68,3 @@ CORE_DEFINE_VECTOR_CONVERSION(CoreVector4, V4, CoreIntVector4, IV4);
|
|
|
{__VA_ARGS__}})
|
|
|
|
|
|
#endif
|
|
|
-
|
|
|
-#endif
|