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