home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / BC_502 / CLASSINC.PAK / FIXEDPNT.H < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-06  |  4.1 KB  |  107 lines

  1. //----------------------------------------------------------------------------
  2. // Borland Class Library
  3. // Copyright (c) 1993, 1997 by Borland International, All Rights Reserved
  4. //
  5. //$Revision:   5.4  $
  6. //
  7. // Simple fixed point class that maintains numbers as 16.16
  8. //----------------------------------------------------------------------------
  9. #if !defined(CLASSLIB_FIXEDPNT_H)
  10. #define CLASSLIB_FIXEDPNT_H
  11.  
  12. #if defined(BI_NAMESPACE)
  13. namespace ClassLib {
  14. #endif
  15.  
  16. //
  17. // class TFixedPoint
  18. // ~~~~~ ~~~~~~~~~~~
  19. class TFixedPoint {
  20.   public:
  21.     TFixedPoint(int s = 0) {Value = long(s) << 16;}
  22.     TFixedPoint(int num, int denom) {Value = long(num) * 65536L / denom;}
  23.  
  24.     // Unary negation operator
  25.     //
  26.     TFixedPoint         operator -() {return -Value;}
  27.  
  28.     // Postfix increment/decrement operators
  29.     //
  30.     void           operator ++(int) {Value += 1L << 16;}
  31.     void           operator --(int) {Value -= 1L << 16;}
  32.  
  33.     // Bitwise logical operators
  34.     //
  35.     TFixedPoint    operator <<(unsigned n) {return Value << _TCHAR(n);}
  36.     TFixedPoint    operator >>(unsigned n) {return Value >> _TCHAR(n);}
  37.  
  38.     // Assignment operators
  39.     //
  40.     TFixedPoint&   operator <<=(unsigned n) {Value <<= n; return *this;}
  41.     TFixedPoint&   operator >>=(unsigned n) {Value >>= n; return *this;}
  42.  
  43.     TFixedPoint&   operator +=(const TFixedPoint& f) {Value += f.Value; return *this;}
  44.  
  45.     TFixedPoint&   operator -=(const TFixedPoint& f) {Value -= f.Value; return *this;}
  46.  
  47.     TFixedPoint&   operator *=(int s) {Value *= s; return *this;}
  48.     TFixedPoint&   operator *=(const TFixedPoint& f) {Value = (Value >> 8) * (f.Value >> 8);
  49.                                                  return *this;}
  50.  
  51.     TFixedPoint&   operator /=(int s) {Value /= s; return *this;}
  52.     TFixedPoint&   operator /=(const TFixedPoint& f) {Value /= f.Value >> 8; Value <<= 8;
  53.                                                  return *this;}
  54.  
  55.     // Binary arithmetic operators
  56.     //
  57.     friend TFixedPoint operator +(const TFixedPoint& l,
  58.                              const TFixedPoint& r) {return l.Value + r.Value;}
  59.     friend TFixedPoint operator +(int           l,
  60.                              const TFixedPoint& r) {return TFixedPoint(l) += r.Value;}
  61.     friend TFixedPoint operator +(const TFixedPoint& l,
  62.                              int           r) {return r + l;}
  63.  
  64.     friend TFixedPoint operator -(const TFixedPoint& l,
  65.                              const TFixedPoint& r) {return l.Value - r.Value;}
  66.     friend TFixedPoint operator -(int           l,
  67.                              const TFixedPoint& r) {return TFixedPoint(l) -= r.Value;}
  68.     friend TFixedPoint operator -(const TFixedPoint& l,
  69.                              int           r) {return l - TFixedPoint(r);}
  70.  
  71.     friend TFixedPoint operator *(const TFixedPoint& l,
  72.                              const TFixedPoint& r) {return (l.Value >> 8) * (r.Value >> 8);}
  73.     friend TFixedPoint operator *(int           l,
  74.                              const TFixedPoint& r) {return l * r.Value;}
  75.     friend TFixedPoint operator *(const TFixedPoint& l,
  76.                              int           r) {return l.Value * r;}
  77.  
  78.     friend TFixedPoint operator /(const TFixedPoint& l,
  79.                              const TFixedPoint& r) {return (l.Value /(r.Value >> 8)) << 8;}
  80.     friend TFixedPoint operator /(int           l,
  81.                              const TFixedPoint& r) {return (long(l) << 16) / r.Value;}
  82.     friend TFixedPoint operator /(const TFixedPoint& l,
  83.                              int           r) {return l.Value / r;}
  84.  
  85.     // Equality operators
  86.     //
  87.     friend bool   operator ==(const TFixedPoint& l,
  88.                               const TFixedPoint& r) {return l.Value == r.Value;}
  89.     friend bool   operator !=(const TFixedPoint& l,
  90.                               const TFixedPoint& r) {return l.Value != r.Value;}
  91.  
  92.     // Conversion operator to int
  93.     //
  94.     operator int() {return int(Value >> 16);}
  95.  
  96.   private:
  97.     TFixedPoint(long v) {Value = v;}
  98.  
  99.     long  Value;
  100. };
  101.  
  102. #if defined(BI_NAMESPACE)
  103. }   // namespace ClassLib
  104. #endif
  105.  
  106. #endif  // CLASSLIB_FIXEDPNT_H
  107.