CrystalSpace

Public API Reference

csgeom/fixed.h

Go to the documentation of this file.
00001 /*
00002     Copyright (C) 2005 by Jorrit Tyberghein
00003                   2005 by Frank Richter
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License as published by the Free Software Foundation; either
00008     version 2 of the License, or (at your option) any later version.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014 
00015     You should have received a copy of the GNU Library General Public
00016     License along with this library; if not, write to the Free
00017     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00018 */
00019 
00020 #ifndef __CS_CSGEOM_FIXED_H__
00021 #define __CS_CSGEOM_FIXED_H__
00022 
00023 #include "csqint.h"
00024 
00036 class csFixed16
00037 {
00038   int32 v;
00039 public:
00041   csFixed16& operator= (float f)
00042   {
00043     v = csQfixed16 (f);
00044     return *this;
00045   }
00046 
00048   inline friend csFixed16 operator- (const csFixed16& v1, 
00049     const csFixed16& v2)
00050   { 
00051     csFixed16 v;
00052     v.v = v1.v - v2.v; 
00053     return v;
00054   }
00056   inline friend csFixed16 operator- (float v1, 
00057     const csFixed16& v2)
00058   { 
00059     csFixed16 v;
00060     v.v = csQfixed16 (v1) - v2.v; 
00061     return v;
00062   }
00064   inline friend csFixed16 operator- (const csFixed16& v1, 
00065     float v2)
00066   { 
00067     csFixed16 v;
00068     v.v = v1.v - csQfixed16 (v2); 
00069     return v;
00070   }
00071   
00073   inline friend csFixed16 operator* (const csFixed16& v1, 
00074     float v2)
00075   { 
00076     csFixed16 v;
00077     v.v = (int32)(v1.v * v2);
00078     return v;
00079   }
00080   
00082   inline csFixed16& operator+= (const csFixed16& x)
00083   {
00084     v += x.v;
00085     return *this;
00086   }
00087 
00089   inline operator int() const
00090   { return v >> 16; }
00091 
00093   inline int32 GetFixed() const { return v; }
00094 
00096   inline friend csFixed16 operator>> (const csFixed16& v1, int n)
00097   {
00098     csFixed16 vn;
00099     vn.v = v1.v >> n;
00100     return vn;
00101   }
00102 };
00103 
00108 class csFixed24
00109 {
00110   int32 v;
00111 public:
00113   csFixed24& operator= (float f)
00114   {
00115     v = csQfixed24 (f);
00116     return *this;
00117   }
00118 
00120   inline friend csFixed24 operator- (const csFixed24& v1, 
00121     const csFixed24& v2)
00122   { 
00123     csFixed24 v;
00124     v.v = v1.v - v2.v; 
00125     return v;
00126   }
00128   inline friend csFixed24 operator- (float v1, 
00129     const csFixed24& v2)
00130   { 
00131     csFixed24 v;
00132     v.v = csQfixed24 (v1) - v2.v; 
00133     return v;
00134   }
00136   inline friend csFixed24 operator- (const csFixed24& v1, 
00137     float v2)
00138   { 
00139     csFixed24 v;
00140     v.v = v1.v - csQfixed24 (v2); 
00141     return v;
00142   }
00143   
00145   inline friend csFixed24 operator* (const csFixed24& v1, 
00146     float v2)
00147   { 
00148     csFixed24 v;
00149     v.v = (int32)(v1.v * v2);
00150     return v;
00151   }
00152 
00154   inline csFixed24& operator+= (const csFixed24& x)
00155   {
00156     v += x.v;
00157     return *this;
00158   }
00159 
00161   inline operator int() const
00162   { return v >> 16; }
00163 
00165   inline int32 GetFixed() const { return v; }
00166 };
00167 
00170 #endif // __CS_CSGEOM_FIXED_H__
00171 

Generated for Crystal Space by doxygen 1.4.6