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:
00040   csFixed16 () {}
00041   csFixed16 (const float f) : v (csQfixed16 (f)) {}
00042 
00044   csFixed16& operator= (const float f)
00045   {
00046     v = csQfixed16 (f);
00047     return *this;
00048   }
00049 
00051   inline friend csFixed16 operator- (const csFixed16& v1, 
00052     const csFixed16& v2)
00053   { 
00054     csFixed16 v;
00055     v.v = v1.v - v2.v; 
00056     return v;
00057   }
00059   inline friend csFixed16 operator- (float v1, 
00060     const csFixed16& v2)
00061   { 
00062     csFixed16 v;
00063     v.v = csQfixed16 (v1) - v2.v; 
00064     return v;
00065   }
00067   inline friend csFixed16 operator- (const csFixed16& v1, 
00068     float v2)
00069   { 
00070     csFixed16 v;
00071     v.v = v1.v - csQfixed16 (v2); 
00072     return v;
00073   }
00074   
00076   inline friend csFixed16 operator* (const csFixed16& v1, 
00077     float v2)
00078   { 
00079     csFixed16 v;
00080     v.v = (int32)(v1.v * v2);
00081     return v;
00082   }
00083   
00085   inline friend csFixed16 operator* (const csFixed16& v1, 
00086     int v2)
00087   { 
00088     csFixed16 v;
00089     v.v = v1.v * v2;
00090     return v;
00091   }
00092   
00094   inline csFixed16& operator+= (const csFixed16& x)
00095   {
00096     v += x.v;
00097     return *this;
00098   }
00099 
00101   inline operator int() const
00102   { return v >> 16; }
00103 
00105   inline int32 GetFixed() const { return v; }
00106 
00108   inline friend csFixed16 operator>> (const csFixed16& v1, int n)
00109   {
00110     csFixed16 vn;
00111     vn.v = v1.v >> n;
00112     return vn;
00113   }
00114 };
00115 
00120 class csFixed24
00121 {
00122   int32 v;
00123 public:
00125   csFixed24& operator= (float f)
00126   {
00127     v = csQfixed24 (f);
00128     return *this;
00129   }
00130 
00132   inline friend csFixed24 operator- (const csFixed24& v1, 
00133     const csFixed24& v2)
00134   { 
00135     csFixed24 v;
00136     v.v = v1.v - v2.v; 
00137     return v;
00138   }
00140   inline friend csFixed24 operator- (float v1, 
00141     const csFixed24& v2)
00142   { 
00143     csFixed24 v;
00144     v.v = csQfixed24 (v1) - v2.v; 
00145     return v;
00146   }
00148   inline friend csFixed24 operator- (const csFixed24& v1, 
00149     float v2)
00150   { 
00151     csFixed24 v;
00152     v.v = v1.v - csQfixed24 (v2); 
00153     return v;
00154   }
00155   
00157   inline friend csFixed24 operator* (const csFixed24& v1, 
00158     float v2)
00159   { 
00160     csFixed24 v;
00161     v.v = (int32)(v1.v * v2);
00162     return v;
00163   }
00164 
00166   inline csFixed24& operator+= (const csFixed24& x)
00167   {
00168     v += x.v;
00169     return *this;
00170   }
00171 
00173   inline operator int() const
00174   { return v >> 16; }
00175 
00177   inline int32 GetFixed() const { return v; }
00178 };
00179 
00182 #endif // __CS_CSGEOM_FIXED_H__
00183 

Generated for Crystal Space by doxygen 1.4.7