Fix InstrumentSwitch grob definition.
[lilypond.git] / flower / include / rational.hh
blobfdc3b68fabd2a8847c23f0aa436d067019d7d4b6
1 /*
2 rational.hh -- declare rational helpers
4 source file of the Flower Library
6 (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
7 */
9 #ifndef RATIONAL_HH
10 #define RATIONAL_HH
12 #include "flower-proto.hh"
13 #include "std-string.hh"
14 #include <limits.h>
16 /**
17 Rational numbers. Included is support for + and - infinity.
19 class Rational
21 /**
22 Sign of rational.
23 -2, .. 2
25 -2,2 is - and + infinity.
26 -1,1 is negative and positive.
27 0 if *this is zero.
29 int sign_;
30 U64 num_, den_;
31 void normalize ();
32 void copy (Rational const &);
34 public:
35 void set_infinite (int sign);
36 bool is_infinity () const;
37 void invert ();
38 I64 numerator () const { return sign_ * num_; }
39 I64 denominator () const { return den_; }
40 I64 num () const { return numerator (); }
41 I64 den () const { return denominator (); }
43 Rational trunc_rat () const;
44 Rational div_rat (Rational) const;
45 Rational mod_rat (Rational) const;
46 Rational abs () const;
47 void negate ();
48 int to_int () const;
50 operator double () const { return to_double (); }
51 double to_double () const;
53 Rational operator - () const;
54 /**
55 Initialize to 0.
57 Rational ();
58 Rational (int);
59 Rational (I64);
60 Rational (U64);
61 explicit Rational (I64, I64);
62 explicit Rational (double);
63 Rational (Rational const &r) { copy (r);}
64 Rational &operator = (Rational const &r)
66 copy (r); return *this;
69 Rational &operator *= (Rational);
70 Rational &operator /= (Rational);
71 Rational &operator += (Rational);
72 Rational &operator -= (Rational);
73 Rational &operator %= (Rational);
74 static int compare (Rational const &, Rational const &);
75 int sign () const;
76 string to_string () const;
79 #include "arithmetic-operator.hh"
81 IMPLEMENT_ARITHMETIC_OPERATOR (Rational, /);
82 IMPLEMENT_ARITHMETIC_OPERATOR (Rational, +);
83 IMPLEMENT_ARITHMETIC_OPERATOR (Rational, *);
84 IMPLEMENT_ARITHMETIC_OPERATOR (Rational, -);
85 IMPLEMENT_ARITHMETIC_OPERATOR (Rational, %);
87 INSTANTIATE_COMPARE (Rational const &, Rational::compare);
89 int compare (Rational const &, Rational const &);
90 int sign (Rational r);
92 inline void
93 Rational::copy (Rational const &r)
95 sign_ = r.sign_;
96 num_ = r.num_;
97 den_ = r.den_;
100 #if 0
101 ostream &
102 operator << (ostream &, Rational);
103 #endif
105 const Rational infinity_rat (U64_MAX);
107 #endif // RATIONAL_HH