1/* ______ ___ ___ 2 * /\ _ \ /\_ \ /\_ \ 3 * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ 4 * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ 5 * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ 6 * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ 7 * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ 8 * /\____/ 9 * \_/__/ 10 * 11 * Fix class inline functions. 12 * 13 * By Shawn Hargreaves. 14 * 15 * See readme.txt for copyright information. 16 */ 17 18 19#ifndef ALLEGRO_FIX_INL 20#define ALLEGRO_FIX_INL 21 22#ifdef __cplusplus 23 24 25inline fix operator + (const fix x, const fix y) { fix t; t.v = x.v + y.v; return t; } 26inline fix operator + (const fix x, const int y) { fix t; t.v = x.v + itofix(y); return t; } 27inline fix operator + (const int x, const fix y) { fix t; t.v = itofix(x) + y.v; return t; } 28inline fix operator + (const fix x, const long y) { fix t; t.v = x.v + itofix(y); return t; } 29inline fix operator + (const long x, const fix y) { fix t; t.v = itofix(x) + y.v; return t; } 30inline fix operator + (const fix x, const float y) { fix t; t.v = x.v + ftofix(y); return t; } 31inline fix operator + (const float x, const fix y) { fix t; t.v = ftofix(x) + y.v; return t; } 32inline fix operator + (const fix x, const double y) { fix t; t.v = x.v + ftofix(y); return t; } 33inline fix operator + (const double x, const fix y) { fix t; t.v = ftofix(x) + y.v; return t; } 34 35inline fix operator - (const fix x, const fix y) { fix t; t.v = x.v - y.v; return t; } 36inline fix operator - (const fix x, const int y) { fix t; t.v = x.v - itofix(y); return t; } 37inline fix operator - (const int x, const fix y) { fix t; t.v = itofix(x) - y.v; return t; } 38inline fix operator - (const fix x, const long y) { fix t; t.v = x.v - itofix(y); return t; } 39inline fix operator - (const long x, const fix y) { fix t; t.v = itofix(x) - y.v; return t; } 40inline fix operator - (const fix x, const float y) { fix t; t.v = x.v - ftofix(y); return t; } 41inline fix operator - (const float x, const fix y) { fix t; t.v = ftofix(x) - y.v; return t; } 42inline fix operator - (const fix x, const double y) { fix t; t.v = x.v - ftofix(y); return t; } 43inline fix operator - (const double x, const fix y) { fix t; t.v = ftofix(x) - y.v; return t; } 44 45inline fix operator * (const fix x, const fix y) { fix t; t.v = fixmul(x.v, y.v); return t; } 46inline fix operator * (const fix x, const int y) { fix t; t.v = x.v * y; return t; } 47inline fix operator * (const int x, const fix y) { fix t; t.v = x * y.v; return t; } 48inline fix operator * (const fix x, const long y) { fix t; t.v = x.v * y; return t; } 49inline fix operator * (const long x, const fix y) { fix t; t.v = x * y.v; return t; } 50inline fix operator * (const fix x, const float y) { fix t; t.v = ftofix(fixtof(x.v) * y); return t; } 51inline fix operator * (const float x, const fix y) { fix t; t.v = ftofix(x * fixtof(y.v)); return t; } 52inline fix operator * (const fix x, const double y) { fix t; t.v = ftofix(fixtof(x.v) * y); return t; } 53inline fix operator * (const double x, const fix y) { fix t; t.v = ftofix(x * fixtof(y.v)); return t; } 54 55inline fix operator / (const fix x, const fix y) { fix t; t.v = fixdiv(x.v, y.v); return t; } 56inline fix operator / (const fix x, const int y) { fix t; t.v = x.v / y; return t; } 57inline fix operator / (const int x, const fix y) { fix t; t.v = fixdiv(itofix(x), y.v); return t; } 58inline fix operator / (const fix x, const long y) { fix t; t.v = x.v / y; return t; } 59inline fix operator / (const long x, const fix y) { fix t; t.v = fixdiv(itofix(x), y.v); return t; } 60inline fix operator / (const fix x, const float y) { fix t; t.v = ftofix(fixtof(x.v) / y); return t; } 61inline fix operator / (const float x, const fix y) { fix t; t.v = ftofix(x / fixtof(y.v)); return t; } 62inline fix operator / (const fix x, const double y) { fix t; t.v = ftofix(fixtof(x.v) / y); return t; } 63inline fix operator / (const double x, const fix y) { fix t; t.v = ftofix(x / fixtof(y.v)); return t; } 64 65inline fix operator << (const fix x, const int y) { fix t; t.v = x.v << y; return t; } 66inline fix operator >> (const fix x, const int y) { fix t; t.v = x.v >> y; return t; } 67 68inline int operator == (const fix x, const fix y) { return (x.v == y.v); } 69inline int operator == (const fix x, const int y) { return (x.v == itofix(y)); } 70inline int operator == (const int x, const fix y) { return (itofix(x) == y.v); } 71inline int operator == (const fix x, const long y) { return (x.v == itofix(y)); } 72inline int operator == (const long x, const fix y) { return (itofix(x) == y.v); } 73inline int operator == (const fix x, const float y) { return (x.v == ftofix(y)); } 74inline int operator == (const float x, const fix y) { return (ftofix(x) == y.v); } 75inline int operator == (const fix x, const double y) { return (x.v == ftofix(y)); } 76inline int operator == (const double x, const fix y) { return (ftofix(x) == y.v); } 77 78inline int operator != (const fix x, const fix y) { return (x.v != y.v); } 79inline int operator != (const fix x, const int y) { return (x.v != itofix(y)); } 80inline int operator != (const int x, const fix y) { return (itofix(x) != y.v); } 81inline int operator != (const fix x, const long y) { return (x.v != itofix(y)); } 82inline int operator != (const long x, const fix y) { return (itofix(x) != y.v); } 83inline int operator != (const fix x, const float y) { return (x.v != ftofix(y)); } 84inline int operator != (const float x, const fix y) { return (ftofix(x) != y.v); } 85inline int operator != (const fix x, const double y) { return (x.v != ftofix(y)); } 86inline int operator != (const double x, const fix y) { return (ftofix(x) != y.v); } 87 88inline int operator < (const fix x, const fix y) { return (x.v < y.v); } 89inline int operator < (const fix x, const int y) { return (x.v < itofix(y)); } 90inline int operator < (const int x, const fix y) { return (itofix(x) < y.v); } 91inline int operator < (const fix x, const long y) { return (x.v < itofix(y)); } 92inline int operator < (const long x, const fix y) { return (itofix(x) < y.v); } 93inline int operator < (const fix x, const float y) { return (x.v < ftofix(y)); } 94inline int operator < (const float x, const fix y) { return (ftofix(x) < y.v); } 95inline int operator < (const fix x, const double y) { return (x.v < ftofix(y)); } 96inline int operator < (const double x, const fix y) { return (ftofix(x) < y.v); } 97 98inline int operator > (const fix x, const fix y) { return (x.v > y.v); } 99inline int operator > (const fix x, const int y) { return (x.v > itofix(y)); } 100inline int operator > (const int x, const fix y) { return (itofix(x) > y.v); } 101inline int operator > (const fix x, const long y) { return (x.v > itofix(y)); } 102inline int operator > (const long x, const fix y) { return (itofix(x) > y.v); } 103inline int operator > (const fix x, const float y) { return (x.v > ftofix(y)); } 104inline int operator > (const float x, const fix y) { return (ftofix(x) > y.v); } 105inline int operator > (const fix x, const double y) { return (x.v > ftofix(y)); } 106inline int operator > (const double x, const fix y) { return (ftofix(x) > y.v); } 107 108inline int operator <= (const fix x, const fix y) { return (x.v <= y.v); } 109inline int operator <= (const fix x, const int y) { return (x.v <= itofix(y)); } 110inline int operator <= (const int x, const fix y) { return (itofix(x) <= y.v); } 111inline int operator <= (const fix x, const long y) { return (x.v <= itofix(y)); } 112inline int operator <= (const long x, const fix y) { return (itofix(x) <= y.v); } 113inline int operator <= (const fix x, const float y) { return (x.v <= ftofix(y)); } 114inline int operator <= (const float x, const fix y) { return (ftofix(x) <= y.v); } 115inline int operator <= (const fix x, const double y) { return (x.v <= ftofix(y)); } 116inline int operator <= (const double x, const fix y) { return (ftofix(x) <= y.v); } 117 118inline int operator >= (const fix x, const fix y) { return (x.v >= y.v); } 119inline int operator >= (const fix x, const int y) { return (x.v >= itofix(y)); } 120inline int operator >= (const int x, const fix y) { return (itofix(x) >= y.v); } 121inline int operator >= (const fix x, const long y) { return (x.v >= itofix(y)); } 122inline int operator >= (const long x, const fix y) { return (itofix(x) >= y.v); } 123inline int operator >= (const fix x, const float y) { return (x.v >= ftofix(y)); } 124inline int operator >= (const float x, const fix y) { return (ftofix(x) >= y.v); } 125inline int operator >= (const fix x, const double y) { return (x.v >= ftofix(y)); } 126inline int operator >= (const double x, const fix y) { return (ftofix(x) >= y.v); } 127 128inline fix sqrt(fix x) { fix t; t.v = fixsqrt(x.v); return t; } 129inline fix cos(fix x) { fix t; t.v = fixcos(x.v); return t; } 130inline fix sin(fix x) { fix t; t.v = fixsin(x.v); return t; } 131inline fix tan(fix x) { fix t; t.v = fixtan(x.v); return t; } 132inline fix acos(fix x) { fix t; t.v = fixacos(x.v); return t; } 133inline fix asin(fix x) { fix t; t.v = fixasin(x.v); return t; } 134inline fix atan(fix x) { fix t; t.v = fixatan(x.v); return t; } 135inline fix atan2(fix x, fix y) { fix t; t.v = fixatan2(x.v, y.v); return t; } 136 137 138inline void get_translation_matrix(MATRIX *m, fix x, fix y, fix z) 139{ 140 get_translation_matrix(m, x.v, y.v, z.v); 141} 142 143 144inline void get_scaling_matrix(MATRIX *m, fix x, fix y, fix z) 145{ 146 get_scaling_matrix(m, x.v, y.v, z.v); 147} 148 149 150inline void get_x_rotate_matrix(MATRIX *m, fix r) 151{ 152 get_x_rotate_matrix(m, r.v); 153} 154 155 156inline void get_y_rotate_matrix(MATRIX *m, fix r) 157{ 158 get_y_rotate_matrix(m, r.v); 159} 160 161 162inline void get_z_rotate_matrix(MATRIX *m, fix r) 163{ 164 get_z_rotate_matrix(m, r.v); 165} 166 167 168inline void get_rotation_matrix(MATRIX *m, fix x, fix y, fix z) 169{ 170 get_rotation_matrix(m, x.v, y.v, z.v); 171} 172 173 174inline void get_align_matrix(MATRIX *m, fix xfront, fix yfront, fix zfront, fix xup, fix yup, fix zup) 175{ 176 get_align_matrix(m, xfront.v, yfront.v, zfront.v, xup.v, yup.v, zup.v); 177} 178 179 180inline void get_vector_rotation_matrix(MATRIX *m, fix x, fix y, fix z, fix a) 181{ 182 get_vector_rotation_matrix(m, x.v, y.v, z.v, a.v); 183} 184 185 186inline void get_transformation_matrix(MATRIX *m, fix scale, fix xrot, fix yrot, fix zrot, fix x, fix y, fix z) 187{ 188 get_transformation_matrix(m, scale.v, xrot.v, yrot.v, zrot.v, x.v, y.v, z.v); 189} 190 191 192inline void get_camera_matrix(MATRIX *m, fix x, fix y, fix z, fix xfront, fix yfront, fix zfront, fix xup, fix yup, fix zup, fix fov, fix aspect) 193{ 194 get_camera_matrix(m, x.v, y.v, z.v, xfront.v, yfront.v, zfront.v, xup.v, yup.v, zup.v, fov.v, aspect.v); 195} 196 197 198inline void qtranslate_matrix(MATRIX *m, fix x, fix y, fix z) 199{ 200 qtranslate_matrix(m, x.v, y.v, z.v); 201} 202 203 204inline void qscale_matrix(MATRIX *m, fix scale) 205{ 206 qscale_matrix(m, scale.v); 207} 208 209 210inline fix vector_length(fix x, fix y, fix z) 211{ 212 fix t; 213 t.v = vector_length(x.v, y.v, z.v); 214 return t; 215} 216 217 218inline void normalize_vector(fix *x, fix *y, fix *z) 219{ 220 normalize_vector(&x->v, &y->v, &z->v); 221} 222 223 224inline void cross_product(fix x1, fix y_1, fix z1, fix x2, fix y2, fix z2, fix *xout, fix *yout, fix *zout) 225{ 226 cross_product(x1.v, y_1.v, z1.v, x2.v, y2.v, z2.v, &xout->v, &yout->v, &zout->v); 227} 228 229 230inline fix dot_product(fix x1, fix y_1, fix z1, fix x2, fix y2, fix z2) 231{ 232 fix t; 233 t.v = dot_product(x1.v, y_1.v, z1.v, x2.v, y2.v, z2.v); 234 return t; 235} 236 237 238inline void apply_matrix(MATRIX *m, fix x, fix y, fix z, fix *xout, fix *yout, fix *zout) 239{ 240 apply_matrix(m, x.v, y.v, z.v, &xout->v, &yout->v, &zout->v); 241} 242 243 244inline void persp_project(fix x, fix y, fix z, fix *xout, fix *yout) 245{ 246 persp_project(x.v, y.v, z.v, &xout->v, &yout->v); 247} 248 249 250#endif /* ifdef __cplusplus */ 251 252#endif /* ifndef ALLEGRO_FIX_INL */ 253 254 255