diff options
author | Aki <please@ignore.pl> | 2024-03-21 02:23:44 +0100 |
---|---|---|
committer | Aki <please@ignore.pl> | 2024-03-21 02:23:44 +0100 |
commit | ebbf3a75f9b0f6af7ebdc6a02a68c15378e77342 (patch) | |
tree | c1ae71d72382188738aa1f667a9bb23856fc1ccc /StarsEx/Fix.h | |
parent | 1a6f1241eb85c82d4fddf7b61a867a1bb828992e (diff) | |
download | starshatter-ebbf3a75f9b0f6af7ebdc6a02a68c15378e77342.zip starshatter-ebbf3a75f9b0f6af7ebdc6a02a68c15378e77342.tar.gz starshatter-ebbf3a75f9b0f6af7ebdc6a02a68c15378e77342.tar.bz2 |
Removed Fixed Point Arithmetic implementation
This will bite me in near future, won't it? Add it back to FoundationEx
at that point. Try handling it with some constepxr, too.
Keywords for grep: fix-point, fixed-point, fast_f2i, IntMask, FractMask,
fix::one, fix_sixty_five
Diffstat (limited to 'StarsEx/Fix.h')
-rw-r--r-- | StarsEx/Fix.h | 120 |
1 files changed, 0 insertions, 120 deletions
diff --git a/StarsEx/Fix.h b/StarsEx/Fix.h deleted file mode 100644 index 84c5ac3..0000000 --- a/StarsEx/Fix.h +++ /dev/null @@ -1,120 +0,0 @@ -/* Starshatter: The Open Source Project - Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors - Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors - Copyright (c) 1997-2006, Destroyer Studios LLC. - - AUTHOR: John DiCamillo - - - OVERVIEW - ======== - Fixed point number class with 16 bits of fractional precision -*/ - -#ifndef Fix_h -#define Fix_h - -// +--------------------------------------------------------------------+ - -#include "Types.h" - -// +--------------------------------------------------------------------+ - -const double fix_sixty_five=65536.0; - -inline int fast_f2i(double d) -{ - return static_cast<int>(d); -} - -// +--------------------------------------------------------------------+ - -class fix -{ -public: - static const char* TYPENAME() { return "fix"; } - - enum FixDef { Precision=16, IntMask=0xffff0000, FractMask=0x0000ffff }; - static const fix one; - static const fix two; - static const fix three; - static const fix five; - static const fix ten; - - fix() : val(0) { } - fix(int n) : val(n<<Precision) { } - fix(double d) : val(static_cast<long>(d * fix_sixty_five)) { } - fix(const fix& f) : val(f.val) { } - - // conversion operators: - operator int () const { return (val>>Precision); } - operator float () const { return ((float) val) / ((float) fix_sixty_five); } - operator double() const { return ((double) val) / fix_sixty_five; } - - // assignment operators: - fix& operator=(const fix& f) { val=f.val; return *this; } - fix& operator=(int n) { val=(n<<Precision); return *this; } - fix& operator=(double d) { val = static_cast<long>(d * fix_sixty_five); return *this; } - - // comparison operators: - int operator==(const fix& f) const { return val==f.val; } - int operator!=(const fix& f) const { return val!=f.val; } - int operator<=(const fix& f) const { return val<=f.val; } - int operator>=(const fix& f) const { return val>=f.val; } - int operator< (const fix& f) const { return val< f.val; } - int operator> (const fix& f) const { return val> f.val; } - - // arithmetic operators: - fix operator+(const fix& f) const { fix r; r.val = val+f.val; return r; } - fix operator-(const fix& f) const { fix r; r.val = val-f.val; return r; } - fix operator*(const fix& f) const { - fix r; - r.val = (val * f.val) >> Precision; - return r; } - fix operator/(const fix& f) const { - fix r; - r.val = (val << Precision) / f.val; - return r; } - fix& operator+=(const fix& f) { val+=f.val; return *this; } - fix& operator-=(const fix& f) { val-=f.val; return *this; } - fix& operator*=(const fix& f) { - val = (val * f.val) >> Precision; - return *this; } - fix& operator/=(const fix& f) { - val = (val << Precision) / f.val; - return *this; } - - fix operator+(int n) const { fix r; r.val = val+(n<<Precision); return r; } - fix operator-(int n) const { fix r; r.val = val-(n<<Precision); return r; } - fix operator*(int n) const { fix r; r.val = val*n; return r; } - fix operator/(int n) const { fix r; r.val = val/n; return r; } - fix& operator+=(int n) { val+=(n<<Precision); return *this; } - fix& operator-=(int n) { val-=(n<<Precision); return *this; } - fix& operator*=(int n) { val*=n; return *this; } - fix& operator/=(int n) { val/=n; return *this; } - - fix operator+(double d) const { fix f(d); return (*this)+f; } - fix operator-(double d) const { fix f(d); return (*this)-f; } - fix operator*(double d) const { fix f(d); return (*this)*f; } - fix operator/(double d) const { fix f(d); return (*this)/f; } - fix& operator+=(double d) { fix f(d); val+=f.val; return *this; } - fix& operator-=(double d) { fix f(d); val-=f.val; return *this; } - fix& operator*=(double d) { val*=static_cast<long>(d); return *this; } - fix& operator/=(double d) { val/=static_cast<long>(d); return *this; } - - // misc. functions: - fix truncate() const { fix r; r.val = val&IntMask; return r; } - fix fraction() const { fix r; r.val = val-truncate().val; return r; } - fix floor() const { fix r; r.val = val&IntMask; return r; } - fix ceil() const { fix r; r.val = (val+FractMask)&IntMask; return r; } - fix adjust_up() const { fix r; r.val = val+FractMask; return r; } - fix adjust_down() const { fix r; r.val = val-FractMask; return r; } - - fix muldiv(const fix& num, const fix& den) const { return (*this) * num / den; } - - // data: - long val; -}; - -#endif // Fix_h - |