|
| 1 | +#if !(defined __VECTOR_2D_H_ || defined __VECTOR_3D_H_) |
| 2 | +# error "Use vector2d or vector3d instead of this!" |
| 3 | +#endif |
| 4 | + |
| 5 | +#ifndef __VEC_COMPONENT_H_ |
| 6 | +#define __VEC_COMPONENT_H_ |
| 7 | + |
| 8 | +#include <math.h> |
| 9 | +#include <inttypes.h> |
| 10 | + |
| 11 | +#if defined (_VECTOR2D_USE_UINT8_) |
| 12 | +# define vec_component uint8_t |
| 13 | +# define mod_vec_component vec_component |
| 14 | +# define vector2d_pow(v, p) ((uint8_t) powf(v, p)) |
| 15 | +# define vector2d_atan2(y, x) ((uint8_t) atan2f(y, x)) |
| 16 | +# define vector2d_acos(v) ((uint8_t) acosf(v)) |
| 17 | +# define vector2d_cos(v) ((uint8_t) cosf(v)) |
| 18 | +#elif defined (_VECTOR2D_USE_INT8_) |
| 19 | +# define vec_component int8_t |
| 20 | +# define mod_vec_component vec_component |
| 21 | +# define vector2d_pow(v, p) ((int8_t) powf(v, p)) |
| 22 | +# define vector2d_atan2(y, x) ((int8_t) atan2f(y, x)) |
| 23 | +# define vector2d_acos(v) ((int8_t) acosf(v)) |
| 24 | +# define vector2d_cos(v) ((int8_t) cosf(v)) |
| 25 | +#elif defined (_VECTOR2D_USE_UINT16_) |
| 26 | +# define vec_component uint16_t |
| 27 | +# define mod_vec_component vec_component |
| 28 | +# define vector2d_pow(v, p) ((uint16_t) powf(v, p)) |
| 29 | +# define vector2d_atan2(y, x) ((uint16_t) atan2f(y, x)) |
| 30 | +# define vector2d_acos(v) ((uint16_t) acosf(v)) |
| 31 | +# define vector2d_cos(v) ((uint16_t) cosf(v)) |
| 32 | +#elif defined (_VECTOR2D_USE_INT16_) |
| 33 | +# define vec_component int16_t |
| 34 | +# define mod_vec_component vec_component |
| 35 | +# define vector2d_pow(v, p) ((int16_t) powf(v, p)) |
| 36 | +# define vector2d_atan2(y, x) ((int16_t) atan2f(y, x)) |
| 37 | +# define vector2d_acos(v) ((int16_t) acosf(v)) |
| 38 | +# define vector2d_cos(v) ((int16_t) cosf(v)) |
| 39 | +#elif defined (_VECTOR2D_USE_UINT32_) |
| 40 | +# define vec_component uint32_t |
| 41 | +# define mod_vec_component vec_component |
| 42 | +# define vector2d_pow(v, p) ((uint32_t) powf(v, p)) |
| 43 | +# define vector2d_atan2(y, x) ((uint32_t) atan2f(y, x)) |
| 44 | +# define vector2d_acos(v) ((uint32_t) acosf(v)) |
| 45 | +# define vector2d_cos(v) ((uint32_t) cosf(v)) |
| 46 | +#elif defined (_VECTOR2D_USE_INT32_) |
| 47 | +# define vec_component int32_t |
| 48 | +# define mod_vec_component vec_component |
| 49 | +# define vector2d_pow(v, p) ((int32_t) powf(v, p)) |
| 50 | +# define vector2d_atan2(y, x) ((int32_t) atan2f(y, x)) |
| 51 | +# define vector2d_acos(v) ((int32_t) acosf(v)) |
| 52 | +# define vector2d_cos(v) ((int32_t) cosf(v)) |
| 53 | +#elif defined (_VECTOR2D_USE_UINT64_) |
| 54 | +# define vec_component uint64_t |
| 55 | +# define mod_vec_component vec_component |
| 56 | +# define vector2d_pow(v, p) ((uint64_t) powl(v, p)) |
| 57 | +# define vector2d_atan2(y, x) ((uint64_t) atan2l(y, x)) |
| 58 | +# define vector2d_acos(v) ((uint64_t) acosl(v)) |
| 59 | +# define vector2d_cos(v) ((uint64_t) cosf(v)) |
| 60 | +#elif defined (_VECTOR2D_USE_INT64_) |
| 61 | +# define vec_component int64_t |
| 62 | +# define mod_vec_component vec_component |
| 63 | +# define vector2d_pow(v, p) ((int64_t) powl(v, p)) |
| 64 | +# define vector2d_atan2(y, x) ((int64_t) atan2l(y, x)) |
| 65 | +# define vector2d_acos(v) ((int64_t) acosl(v)) |
| 66 | +# define vector2d_cos(v) ((int64_t) cosf(v)) |
| 67 | +#elif defined (_VECTOR2D_USE_DOUBLE_) |
| 68 | +# define vec_component double |
| 69 | +# define mod_vec_component int64_t |
| 70 | +# define vector2d_pow(v, p) ((double) powl(v, p)) |
| 71 | +# define vector2d_atan2(y, x) ((double) atan2l(y, x)) |
| 72 | +# define vector2d_acos(v) ((double) acosl(v)) |
| 73 | +# define vector2d_cos(v) ((double) cosf(v)) |
| 74 | +#else |
| 75 | +// default program flow |
| 76 | +typedef float vec_component; |
| 77 | +typedef int32_t mod_vec_component; |
| 78 | +# define vector2d_pow(v, p) ((float) pow(v, p)) |
| 79 | +# define vector2d_atan2(y, x) ((float) atan2f(y, x)) |
| 80 | +# define vector2d_acos(v) ((float) acosf(v)) |
| 81 | +# define vector2d_cos(v) ((float) cosf(v)) |
| 82 | +# define vector2d_sin(v) ((float) sinf(v)) |
| 83 | +#endif |
| 84 | + |
| 85 | +#define vector2d_sqrt(v) vector2d_pow(v, 0.5) |
| 86 | +#define vector2d_abs(v) ((vec_component) vector2d_sqrt(vector2d_pow(v, 2))) |
| 87 | + |
| 88 | +#endif // __VEC_COMPONENT_H_ |
0 commit comments