Inline operators

This commit is contained in:
duarteapcoelho 2022-08-28 14:04:15 +01:00
parent 44ea52dfd4
commit 4cd1f0c28c
2 changed files with 45 additions and 45 deletions

View File

@ -6,37 +6,37 @@
class fp {
public:
int i;
fp(int v){
inline fp(int v){
i = v * FP_RIGHT;
}
fp(float v){
inline fp(float v){
i = v * FP_RIGHT;
}
fp(double v){
inline fp(double v){
i = v * FP_RIGHT;
}
fp(){ i = 0; }
inline fp(){ i = 0; }
operator int() { return i / FP_RIGHT; }
operator float() { return ((float)i) / ((float)FP_RIGHT); }
inline operator int() { return i / FP_RIGHT; }
inline operator float() { return ((float)i) / ((float)FP_RIGHT); }
fp operator + (fp o){
inline fp operator + (fp o){
fp r;
r.i = i + o.i;
return r;
}
fp operator - (fp o){
inline fp operator - (fp o){
fp r;
r.i = i - o.i;
return r;
}
fp operator * (fp o){
inline fp operator * (fp o){
// printf("%d %d %d\n", i, o.i, INT_MAX);
fp r;
r.i = (i * o.i) / FP_RIGHT;
return r;
}
fp operator / (fp o){
inline fp operator / (fp o){
fp r;
r.i = i*FP_RIGHT / o.i;
return r;
@ -59,27 +59,27 @@ class fp {
// return *this;
// }
bool operator > (fp o){ return i > o.i; }
bool operator < (fp o){ return i < o.i; }
bool operator > (int o){ return i > o*FP_RIGHT; }
bool operator < (int o){ return i < o*FP_RIGHT; }
bool operator > (float o){ return i > o*FP_RIGHT; }
bool operator < (float o){ return i < o*FP_RIGHT; }
bool operator > (double o){ return i > o*FP_RIGHT; }
bool operator < (double o){ return i < o*FP_RIGHT; }
bool operator >= (fp o){ return i >= o.i; }
bool operator <= (fp o){ return i <= o.i; }
bool operator >= (int o){ return i >= o*FP_RIGHT; }
bool operator <= (int o){ return i <= o*FP_RIGHT; }
bool operator >= (float o){ return i >= o*FP_RIGHT; }
bool operator <= (float o){ return i <= o*FP_RIGHT; }
bool operator >= (double o){ return i >= o*FP_RIGHT; }
bool operator <= (double o){ return i <= o*FP_RIGHT; }
inline bool operator > (fp o){ return i > o.i; }
inline bool operator < (fp o){ return i < o.i; }
inline bool operator > (int o){ return i > o*FP_RIGHT; }
inline bool operator < (int o){ return i < o*FP_RIGHT; }
inline bool operator > (float o){ return i > o*FP_RIGHT; }
inline bool operator < (float o){ return i < o*FP_RIGHT; }
inline bool operator > (double o){ return i > o*FP_RIGHT; }
inline bool operator < (double o){ return i < o*FP_RIGHT; }
inline bool operator >= (fp o){ return i >= o.i; }
inline bool operator <= (fp o){ return i <= o.i; }
inline bool operator >= (int o){ return i >= o*FP_RIGHT; }
inline bool operator <= (int o){ return i <= o*FP_RIGHT; }
inline bool operator >= (float o){ return i >= o*FP_RIGHT; }
inline bool operator <= (float o){ return i <= o*FP_RIGHT; }
inline bool operator >= (double o){ return i >= o*FP_RIGHT; }
inline bool operator <= (double o){ return i <= o*FP_RIGHT; }
bool operator == (fp o){ return i == o.i; }
bool operator == (int o){ return i == o*FP_RIGHT; }
bool operator == (float o){ return i == o*FP_RIGHT; }
bool operator == (double o){ return i == o*FP_RIGHT; }
inline bool operator == (fp o){ return i == o.i; }
inline bool operator == (int o){ return i == o*FP_RIGHT; }
inline bool operator == (float o){ return i == o*FP_RIGHT; }
inline bool operator == (double o){ return i == o*FP_RIGHT; }
};
// typedef float fp;

View File

@ -12,30 +12,30 @@ struct vec3d {
fp x;
fp y;
fp z;
vec3d operator + (vec3d o){
inline vec3d operator + (vec3d o){
return {x + o.x, y + o.y, z + o.z};
}
vec3d operator - (vec3d o){
inline vec3d operator - (vec3d o){
return {x - o.x, y - o.y, z - o.z};
}
vec3d operator * (vec3d o){
inline vec3d operator * (vec3d o){
return {x * o.x, y * o.y, z * o.z};
}
vec3d operator / (vec3d o){
inline vec3d operator / (vec3d o){
return {x / o.x, y / o.y, z / o.z};
}
vec3d operator * (fp o){
inline vec3d operator * (fp o){
return {x * o, y * o, z * o};
}
vec3d operator / (fp o){
inline vec3d operator / (fp o){
return {x / o, y / o, z / o};
}
bool operator == (vec3d o){
inline bool operator == (vec3d o){
return x == o.x && y == o.y && z == o.z;
}
vec3d normalized(){
inline vec3d normalized(){
fp i_d = fp_isqrt(x*x + y*y + z*z);
return (*this) * i_d;
}
@ -45,26 +45,26 @@ struct vec3f {
float x;
float y;
float z;
vec3f operator + (vec3f o){
inline vec3f operator + (vec3f o){
return {x + o.x, y + o.y, z + o.z};
}
vec3f operator - (vec3f o){
inline vec3f operator - (vec3f o){
return {x - o.x, y - o.y, z - o.z};
}
vec3f operator * (vec3f o){
inline vec3f operator * (vec3f o){
return {x * o.x, y * o.y, z * o.z};
}
vec3f operator / (vec3f o){
inline vec3f operator / (vec3f o){
return {x / o.x, y / o.y, z / o.z};
}
vec3f operator * (float o){
inline vec3f operator * (float o){
return {x * o, y * o, z * o};
}
vec3f operator / (float o){
inline vec3f operator / (float o){
return {x / o, y / o, z / o};
}
bool operator == (vec3f o){
inline bool operator == (vec3f o){
return x == o.x && y == o.y && z == o.z;
}
};