rationalNumber.h

Go to the documentation of this file.
00001 #pragma once
00002 
00003 
00004 
00005 #include <sstream>
00006 #include <iostream>
00007 #include <assert.h>
00008 
00022 struct rationalNumber
00023 {
00024 protected:
00025 
00026         
00029                 int numerator;
00030                 int denominator;        
00031 
00033                 int    extractSign(std::stringstream& number);
00034 
00035 public:
00036                 static const rationalNumber Zero;
00037                 static const rationalNumber One;
00038 
00039                 static bool memsetClearAllowed() {      return true;    }
00040 
00044                 inline  rationalNumber();
00045         
00046                 inline  rationalNumber(int value);
00047                 
00048                 inline  rationalNumber(int _numerator, int _denominator);
00049 
00050                         rationalNumber(std::stringstream& number);
00051 
00057                 inline int getNumerator() const;
00058                 inline int getDenominator() const; 
00064                 inline bool     isZero() const;
00065                 inline bool     isNotZero() const;
00066                 inline int      getSign() const;
00072                 rationalNumber& operator+=(const rationalNumber& r2);
00073                 std::ostream & operator<<(std::ostream & os) const;
00074 
00075                 bool  operator==(const rationalNumber& r2) const;
00076 
00077                 bool  operator!=(const rationalNumber& r2) const;
00078 
00079                 rationalNumber operator-()
00080                 {
00081                         return rationalNumber(-numerator, denominator);
00082                 }
00088 };
00089 
00090 
00091 
00092 std::ostream &  operator<<(std::ostream & out, const rationalNumber& zahl);
00093 
00094 
00095 
00097 inline  rationalNumber::rationalNumber()
00098 {
00099         numerator   = 0;
00100         denominator = 1;
00101 }
00102 
00104 inline  rationalNumber::rationalNumber(int value) 
00105 {
00106                 denominator  = 1;
00107                 numerator    = value;
00108 };
00109 
00110 inline  rationalNumber::rationalNumber(int _numerator, int _denominator)
00111 {
00112         numerator=_numerator;
00113         denominator=_denominator;
00114 
00115         if (denominator<0)
00116         {
00117                 denominator *= -1;
00118                 numerator   *= -1;
00119         }       
00120 }
00121 
00122 
00123 
00124 inline int rationalNumber::getSign() const
00125 {
00126         // only correct for denominator>0, therefore:
00127                 #ifdef SAFE     
00128                         assert(denominator>0);
00129                 #endif
00130                 if ( numerator>=0 )
00131                         return 1;
00132                 return -1;
00133 }
00134 
00135 inline int rationalNumber::getNumerator() const
00136 {
00137         return numerator;
00138 }
00139 
00140 inline int rationalNumber::getDenominator() const
00141 {
00142         return denominator;
00143 }
00144 
00145 inline bool rationalNumber::isZero() const
00146 {
00147         return (numerator==0);
00148 }
00149 
00150 inline bool rationalNumber::isNotZero() const
00151 {
00152         return (numerator!=0);
00153 }
Generated on Tue Nov 23 13:10:52 2010 for centerfocus by  doxygen 1.6.3