Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 #ifndef __ARTKPFLOAT_FLOAT_HEADERFILE__
00042 #define __ARTKPFLOAT_FLOAT_HEADERFILE__
00043 
00044 #include <math.h>
00045 
00046 
00047 
00048 
00049 
00050 
00051 template <typename BASETYPE_>
00052 class artkpFloat_float
00053 {
00054 public:
00055         typedef BASETYPE_ BASETYPE;
00056 
00057         artkpFloat_float()                                                                      {}
00058         artkpFloat_float(int nV)                                                        {  setInt(nV);  }
00059         artkpFloat_float(unsigned int nV)                                       {  setUnsignedInt(nV);  }
00060         artkpFloat_float(float nV)                                                      {  setFloat(nV);  }
00061         artkpFloat_float(double nV)                                                     {  setDouble(nV);  }
00062         artkpFloat_float(const artkpFloat_float& nOther)        {  v = nOther.v;  }
00063 
00064         
00065         
00066         bool isFixed()                                                                          {  return false;  };
00067 
00068         void setFixed(int nV)                                                   {  v = nV/65536.0f;  }
00069         void setInt(int nV)                                                             {  v = (BASETYPE)nV;  }
00070         void setUnsignedInt(int nV)                                             {  v = (BASETYPE)nV;  }
00071         void setFloat(float nV)                                                 {  v = nV;  }
00072         void setDouble(double nV)                                               {  v = (BASETYPE)nV;  }
00073         void setArtkpFloat(const artkpFloat_float& nOther)      {  v = nOther.v;  }
00074 
00075         int getByte() const         {  return (int)(v*255.0f);  }
00076         int getFixed() const        {  return (int)(v*65536.0f);  }
00077         int getInt() const                      {  return (int)v;  }
00078         float getFloat() const          {  return (float)v;  }
00079         double getDouble() const        {  return (double)v;  }
00080 
00081         operator double() const         {  return getDouble();  }
00082 
00083         void inverse(const artkpFloat_float& nOther)            {  v = BASETYPE(1)/nOther.v;  }
00084         void inverse()                                                                          {  v = BASETYPE(1)/v;  }
00085 
00086         void inverseSqrt(const artkpFloat_float& nOther)        {  v = BASETYPE(1)/(BASETYPE)sqrt(nOther.v);  }
00087         void inverseSqrt()                                                              {  v = BASETYPE(1)/(BASETYPE)sqrt(v);  }
00088 
00089         void multiplyBy255()                                                    {  v *= 255.0f;  }
00090 
00091 
00092         
00093         
00094         friend inline const artkpFloat_float sqrt(const artkpFloat_float& nV)
00095                 {  return ::sqrt(nV.v);  }
00096         friend inline const artkpFloat_float cos(const artkpFloat_float& nV)
00097                 {  return ::cos(nV.v);  }
00098         friend inline const artkpFloat_float sin(const artkpFloat_float& nV)
00099                 {  return ::sin(nV.v);  }
00100         friend inline const artkpFloat_float acos(const artkpFloat_float& nV)
00101                 {  return ::acos(nV.v);  }
00102         friend inline const artkpFloat_float asin(const artkpFloat_float& nV)
00103                 {  return ::asin(nV.v);  }
00104         friend inline const artkpFloat_float atan2(const artkpFloat_float& nVa, const artkpFloat_float& nVb)
00105                 {  return ::atan2(nVa.v,nVb.v);  }
00106         friend inline const artkpFloat_float fabs(const artkpFloat_float& nV)
00107                 {  return ::fabs(nV.v);  }
00108         friend inline const artkpFloat_float pow(const artkpFloat_float& nVa, const artkpFloat_float& nVb)
00109                 {  return ::pow(nVa.v,nVb.v);  }
00110         friend inline const artkpFloat_float ceil(const artkpFloat_float& nV)
00111                 {  return ::ceil(nV.v);  }
00112 
00113         
00114         
00115         artkpFloat_float& operator=(unsigned int nV)                            {  setInt(nV);  return *this; }
00116         artkpFloat_float& operator=(int nV)                                                     {  setInt(nV);  return *this; }
00117         artkpFloat_float& operator=(float nV)                                           {  setFloat(nV);  return *this; }
00118         artkpFloat_float& operator=(double nV)                                          {  setDouble(nV);  return *this; }
00119         artkpFloat_float& operator=(const artkpFloat_float& nOther)     {  v = nOther.v;  return *this;  }
00120 
00121         artkpFloat_float operator-() const  {  artkpFloat_float w;  w.v = -v;  return w;  }
00122 
00123         artkpFloat_float& operator+=(int nV)    {  v+=(BASETYPE)nV;  return *this;  }
00124         artkpFloat_float& operator-=(int nV)    {  v-=(BASETYPE)nV;  return *this;  }
00125         artkpFloat_float& operator*=(int nV)    {  v*=(BASETYPE)nV;  return *this;  }
00126         artkpFloat_float& operator/=(int nV)    {  v/=(BASETYPE)nV;  return *this;  }
00127 
00128         artkpFloat_float& operator+=(float nV)  {  v+=nV;  return *this;  }
00129         artkpFloat_float& operator-=(float nV)  {  v-=nV;  return *this;  }
00130         artkpFloat_float& operator*=(float nV)  {  v*=nV;  return *this;  }
00131         artkpFloat_float& operator/=(float nV)  {  v/=nV;  return *this;  }
00132 
00133         artkpFloat_float& operator+=(double nV) {  v+=(BASETYPE)nV;  return *this;  }
00134         artkpFloat_float& operator-=(double nV) {  v-=(BASETYPE)nV;  return *this;  }
00135         artkpFloat_float& operator*=(double nV) {  v*=(BASETYPE)nV;  return *this;  }
00136         artkpFloat_float& operator/=(double nV) {  v/=(BASETYPE)nV;  return *this;  }
00137 
00138         artkpFloat_float& operator+=(const artkpFloat_float& nOther)    {  v+=nOther.v;  return *this;  }
00139         artkpFloat_float& operator-=(const artkpFloat_float& nOther)    {  v-=nOther.v;  return *this;  }
00140         artkpFloat_float& operator*=(const artkpFloat_float& nOther)    {  v*=nOther.v;  return *this;  }
00141         artkpFloat_float& operator/=(const artkpFloat_float& nOther)    {  v/=nOther.v;  return *this;  }
00142 
00143         artkpFloat_float& operator>>=(int nBits)        {  int tmp=1<<nBits;    v/=tmp;  return *this;  }
00144         artkpFloat_float& operator<<=(int nBits)        {  int tmp=1<<nBits;    v*=tmp;  return *this;  }
00145 
00146         bool operator==(const artkpFloat_float& nOther) const           {  return v==nOther.v;  }
00147         bool operator!=(const artkpFloat_float& nOther) const           {  return v!=nOther.v;  }
00148         bool operator<=(const artkpFloat_float& nOther) const           {  return v<=nOther.v;  }
00149         bool operator>=(const artkpFloat_float& nOther) const           {  return v>=nOther.v;  }
00150         bool operator<(const artkpFloat_float& nOther) const            {  return v<nOther.v;  }
00151         bool operator>(const artkpFloat_float& nOther) const            {  return v>nOther.v;  }
00152 
00153         bool operator==(int nOther) const               {  return v==(BASETYPE)nOther;  }
00154         bool operator!=(int nOther) const               {  return v!=(BASETYPE)nOther;  }
00155         bool operator<=(int nOther) const               {  return v<=(BASETYPE)nOther;  }
00156         bool operator>=(int nOther) const               {  return v>=(BASETYPE)nOther;  }
00157         bool operator<(int nOther) const                {  return v< (BASETYPE)nOther;  }
00158         bool operator>(int nOther) const                {  return v> (BASETYPE)nOther;  }
00159 
00160         bool operator==(float nOther) const             {  return v==nOther;  }
00161         bool operator!=(float nOther) const             {  return v!=nOther;  }
00162         bool operator<=(float nOther) const             {  return v<=nOther;  }
00163         bool operator>=(float nOther) const             {  return v>=nOther;  }
00164         bool operator<(float nOther) const              {  return v<nOther;  }
00165         bool operator>(float nOther) const              {  return v>nOther;  }
00166 
00167         friend inline const artkpFloat_float operator+(const artkpFloat_float& left, const artkpFloat_float& right)
00168                 {       return left.v+right.v;  }
00169         friend inline const artkpFloat_float operator+(const artkpFloat_float& left, float right)
00170                 {       return left.v+right;    }
00171         friend inline const artkpFloat_float operator+(float left, const artkpFloat_float& right)
00172                 {       return left+right.v;    }
00173 
00174         friend inline const artkpFloat_float operator-(const artkpFloat_float& left, const artkpFloat_float& right)
00175         {       return left.v-right.v;  }
00176         friend inline const artkpFloat_float operator-(const artkpFloat_float& left, float right)
00177         {       return left.v-right;    }
00178         friend inline const artkpFloat_float operator-(float left, const artkpFloat_float& right)
00179         {       return left-right.v;    }
00180 
00181         friend inline const artkpFloat_float operator*(const artkpFloat_float& left, const artkpFloat_float& right)
00182         {       return left.v*right.v;  }
00183         friend inline const artkpFloat_float operator*(const artkpFloat_float& left, float right)
00184         {       return left.v*right;    }
00185         friend inline const artkpFloat_float operator*(float left, const artkpFloat_float& right)
00186         {       return left*right.v;    }
00187 
00188         friend inline const artkpFloat_float operator/(const artkpFloat_float& left, const artkpFloat_float& right)
00189         {       return left.v/right.v;  }
00190         friend inline const artkpFloat_float operator/(const artkpFloat_float& left, float right)
00191         {       return left.v/right;    }
00192         friend inline const artkpFloat_float operator/(float left, const artkpFloat_float& right)
00193         {       return left/right.v;    }
00194 
00195 protected:
00196         BASETYPE v;
00197 };
00198 
00199 
00200 
00201 
00202 
00203 
00204 
00205 
00206 
00207 
00208 
00209 
00210 
00211 
00212 
00213 
00214 
00215 
00216 
00217 
00218 
00219 
00220 
00221 
00222 
00223 
00224 
00225 
00226 
00227 
00228 
00229 
00230 
00231 
00232 
00233 
00234 
00235 
00236 
00237 
00238 
00239 
00240 
00241 
00242 
00243 
00244 
00245 
00246 
00247 
00248 
00249 
00250 
00251 
00252 
00253 
00254 
00255 
00256 
00257 
00258 
00259 
00260 
00261 
00262 
00263 
00264 
00265 
00266 
00267 
00268 
00269 
00270 
00271 
00272 
00273 
00274 
00275 
00276 
00277 
00278 
00279 
00280 
00281 
00282 
00283 
00284 
00285 
00286 
00287 
00288 
00289 
00290 
00291 
00292 
00293 
00294 
00295 
00296 
00297 
00298 
00299 
00300 
00301 
00302 
00303 
00304 
00305 
00306 
00307 
00308 
00309 
00310 
00311 
00312 
00313 
00314 
00315 
00316 
00317 
00318 
00319 
00320 
00321 
00322 
00323 
00324 
00325 
00326 
00327 
00328 
00329 
00330 
00331 
00332 
00333 
00334 
00335 
00336 
00337 
00338 
00339 
00340 
00341 
00342 
00343 
00344 
00345 
00346 
00347 
00348 
00349 
00350 
00351 
00352 
00353 
00354 
00355 
00356 
00357 
00358 
00359 
00360 
00361 
00362 
00363 
00364 
00365 
00366 
00367 
00368 #endif //__ARTKPFLOAT_FLOAT_HEADERFILE__