| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #ifndef CORE_VECTOR_H
- #define CORE_VECTOR_H
- #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 CORE_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, b, name) \
- a* coreConvert##name(a* r, const b* c)
- CORE_DEFINE_VECTOR_CONVERSION(CoreVector2, CoreIntVector2, IV2);
- CORE_DEFINE_VECTOR_CONVERSION(CoreVector3, CoreIntVector3, IV3);
- CORE_DEFINE_VECTOR_CONVERSION(CoreVector4, CoreIntVector4, IV4);
- CORE_DEFINE_VECTOR_CONVERSION(CoreIntVector2, CoreVector2, V2);
- CORE_DEFINE_VECTOR_CONVERSION(CoreIntVector3, CoreVector3, V3);
- CORE_DEFINE_VECTOR_CONVERSION(CoreIntVector4, CoreVector4, V4);
- #endif
|