Vaucanson 1.4
q_number.hh
Go to the documentation of this file.
00001 // q_number.hh: this file is part of the Vaucanson project.
00002 //
00003 // Vaucanson, a generic library for finite state machines.
00004 //
00005 // Copyright (C) 2011 The Vaucanson Group.
00006 //
00007 // This program is free software; you can redistribute it and/or
00008 // modify it under the terms of the GNU General Public License
00009 // as published by the Free Software Foundation; either version 2
00010 // of the License, or (at your option) any later version.
00011 //
00012 // The complete GNU General Public Licence Notice can be found as the
00013 // `COPYING' file in the root directory.
00014 //
00015 // The Vaucanson Group consists of people listed in the `AUTHORS' file.
00016 //
00017 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_SEMIRING_Q_NUMBER_HH
00018 # define VCSN_ALGEBRA_IMPLEMENTATION_SEMIRING_Q_NUMBER_HH
00019 
00020 #include <iostream>
00021 /* @{ *//* @{ */
00035 namespace vcsn
00036 {
00037 /* @{ */
00039   namespace algebra
00040   {/* @{ */
00042 
00057     template<typename IntType>
00058     class TRationalNumber
00059     {
00060     public:
00064       inline
00065       TRationalNumber ();
00067       inline
00068       TRationalNumber (const IntType num);
00070       inline
00071       TRationalNumber (const IntType num, const IntType den);
00073       inline
00074       TRationalNumber (const TRationalNumber<IntType>& nb);
00075       // Object destructor.
00076       inline
00077       ~TRationalNumber ();
00079     public:
00083       inline
00084       TRationalNumber& set (const IntType num, const IntType den = 1);
00089       inline
00090       IntType num_get () const;
00092       inline
00093       IntType den_get () const;
00095       inline
00096       std::ostream& print (std::ostream& ostr) const;
00097 
00099     public:
00103       inline
00104       TRationalNumber<IntType> operator+ (const TRationalNumber<IntType>& nb) const;
00105       inline
00106       TRationalNumber<IntType> operator- (const TRationalNumber<IntType>& nb) const;
00107       inline
00108       TRationalNumber<IntType> operator- () const;
00109       inline
00110       TRationalNumber<IntType> operator* (const TRationalNumber<IntType>& nb) const;
00111       inline
00112       TRationalNumber<IntType> operator/ (const TRationalNumber<IntType>& nb) const;
00113 
00114       inline
00115       TRationalNumber<IntType>& operator+= (const TRationalNumber<IntType>& nb);
00116       inline
00117       TRationalNumber<IntType>& operator-= (const TRationalNumber<IntType>& nb);
00118       inline
00119       TRationalNumber<IntType>& operator*= (const TRationalNumber<IntType>& nb);
00120       inline
00121       TRationalNumber<IntType>& operator/= (const TRationalNumber<IntType>& nb);
00122 
00124       inline
00125       bool operator== (const TRationalNumber<IntType>& nb) const;
00126       inline
00127       bool operator!= (const TRationalNumber<IntType>& nb) const;
00128       inline
00129       bool operator< (const TRationalNumber<IntType>& nb) const;
00130       inline
00131       bool operator<= (const TRationalNumber<IntType>& nb) const;
00132       inline
00133       bool operator> (const TRationalNumber<IntType>& nb) const;
00134       inline
00135       bool operator>= (const TRationalNumber<IntType>& nb) const;
00136 
00137       // @}
00138 
00142       // operator int () const;
00143       //operator float () const;
00144       inline
00145       operator double () const;
00146 
00148       inline
00149       IntType to_integer () const;
00150       inline
00151       float to_float () const;
00152       inline
00153       double to_double () const;
00155     protected:
00158 
00166       inline void set_rational ();
00167       inline void set_rational (const IntType num, const IntType den);
00168       inline void set_unsafe_rational (const IntType num, const IntType den);
00170     protected:
00174       IntType num_;
00176       IntType den_;
00178     }; // TRationalNumber<IntType>
00179 
00180     template<typename IntType>
00181     inline
00182     std::ostream& operator<< (std::ostream&, const TRationalNumber<IntType>&);
00183 
00184     template<typename IntType>
00185     inline
00186     std::istream& operator>> (std::istream&, TRationalNumber<IntType>&);
00187 
00188     typedef TRationalNumber<long long> RationalNumber;
00189 
00191   } // !algebra
00192 
00194 } // !vcsn
00195 
00196 
00197 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00198 #  include <vaucanson/algebra/implementation/semiring/q_number.hxx>
00199 # endif // VCSN_USE_INTERFACE_ONLY
00200 
00201 
00202 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_SEMIRING_Q_NUMBER_HH