summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/Fix.h
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2024-03-21 02:23:44 +0100
committerAki <please@ignore.pl>2024-03-21 02:23:44 +0100
commitebbf3a75f9b0f6af7ebdc6a02a68c15378e77342 (patch)
treec1ae71d72382188738aa1f667a9bb23856fc1ccc /StarsEx/Fix.h
parent1a6f1241eb85c82d4fddf7b61a867a1bb828992e (diff)
downloadstarshatter-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.h120
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
-