X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=flower%2Finclude%2Frational.hh;h=0129cea773dd22da6a64fdfc357549d44cf5f46e;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=a0973e2d58375a46d69fb02316a7e186aaeed285;hpb=58bcc84c9480dae1b21bc24d8396b91fe19e0131;p=lilypond.git diff --git a/flower/include/rational.hh b/flower/include/rational.hh index a0973e2d58..0129cea773 100644 --- a/flower/include/rational.hh +++ b/flower/include/rational.hh @@ -3,13 +3,15 @@ source file of the Flower Library - (c) 1997--2005 Han-Wen Nienhuys + (c) 1997--2008 Han-Wen Nienhuys */ #ifndef RATIONAL_HH #define RATIONAL_HH -#include "string.hh" +#include "flower-proto.hh" +#include "std-string.hh" +#include /** Rational numbers. Included is support for + and - infinity. @@ -25,50 +27,57 @@ class Rational 0 if *this is zero. */ int sign_; - unsigned int num_, den_; - void normalise (); + U64 num_, den_; + void normalize (); void copy (Rational const &); public: void set_infinite (int sign); bool is_infinity () const; void invert (); - int numerator () const { return sign_ * num_; } - int denominator () const { return den_; } - int num () const { return numerator (); } - int den () const { return denominator (); } + I64 numerator () const { return sign_ * num_; } + I64 denominator () const { return den_; } + I64 num () const { return numerator (); } + I64 den () const { return denominator (); } Rational trunc_rat () const; Rational div_rat (Rational) const; Rational mod_rat (Rational) const; + Rational abs () const; void negate (); - // operator bool () const; int to_int () const; - operator double () const; - Rational operator- () const; + + operator double () const { return to_double (); } + double to_double () const; + + Rational operator - () const; /** Initialize to 0. */ Rational (); Rational (int); - Rational (int, int); - Rational (double); + Rational (I64); + Rational (U64); + explicit Rational (I64, I64); + explicit Rational (double); Rational (Rational const &r) { copy (r);} - Rational &operator= (Rational const &r) + Rational &operator = (Rational const &r) { copy (r); return *this; } - Rational &operator*= (Rational); - Rational &operator/= (Rational); - Rational &operator+= (Rational); - Rational &operator-= (Rational); - Rational &operator%= (Rational); + Rational &operator *= (Rational); + Rational &operator /= (Rational); + Rational &operator += (Rational); + Rational &operator -= (Rational); + Rational &operator %= (Rational); static int compare (Rational const &, Rational const &); int sign () const; - String to_string () const; + string to_string () const; }; +#include "arithmetic-operator.hh" + IMPLEMENT_ARITHMETIC_OPERATOR (Rational, /); IMPLEMENT_ARITHMETIC_OPERATOR (Rational, +); IMPLEMENT_ARITHMETIC_OPERATOR (Rational, *); @@ -90,9 +99,9 @@ Rational::copy (Rational const &r) #if 0 ostream & -operator<< (ostream &, Rational); +operator << (ostream &, Rational); #endif -const Rational infinity_rat = INT_MAX; +const Rational infinity_rat (U64_MAX); #endif // RATIONAL_HH