GUIDOLib  1.7.7
Guido Engine Internal Documentation
Fraction.h
1 #ifndef Fraction_H
2 #define Fraction_H
3 
4 /*
5  GUIDO Library
6  Copyright (C) 2002 Holger Hoos, Juergen Kilian, Kai Renz
7  Copyright (C) 2002-2017 Grame
8 
9  This Source Code Form is subject to the terms of the Mozilla Public
10  License, v. 2.0. If a copy of the MPL was not distributed with this
11  file, You can obtain one at http://mozilla.org/MPL/2.0/.
12 
13  Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
14  research@grame.fr
15 
16 */
17 
18 #include <iostream>
19 #include <string>
20 
23 class Fraction
24 {
25  public:
26 
27  Fraction() : numerator(0), denominator(1), dval(0.0) { }
28 
29  Fraction( int theNumerator, int theDenominator );
30  Fraction( double x );
31  Fraction( int value ) : numerator(value), denominator(1) { dval = (double)value; }
32 
33  void print(std::ostream&) const;
34 
35  int getNumerator() const;
36  int getDenominator() const;
37  void normalize();
38 
39  // greatest common denominator
40  static long long gcd(long long i1, long long i2);
41 
42  // smallest common multiple
43  static long long scm(long long i1, long long i2);
44 
45  void set(long long num, long long denom = 1);
46  void setDenominator(long long newDenominator);
47  void setNumerator(long long newNumerator);
48 
49  void invert();
50 
51  // test if fraction is like m/(n^k) is used for the tuplet creation
52  int isMultiple(int n); // Result: exponent (>=0) or -1
53 
54  bool isOdd() const;
55  bool isEven() const;
56 
57  void add (const Fraction &tmp); // non normalized addition
58 
59  Fraction getBiggestFullNote(int exp) const;
60  Fraction getReallySmallerNote(int exp) const;
61 
62  operator double() const;
63  operator float() const;
64  operator std::string() const;
65  inline operator bool() const { return numerator != 0; }
66  bool operator >(const Fraction & in) const { return (dval > in.dval); }
67  bool operator ==(const Fraction & in) const { return (dval == in.dval); }
68  bool operator !=(const Fraction & in) const { return (dval != in.dval); }
69  bool operator <(const Fraction & in) const { return (dval < in.dval); }
70  bool operator >=(const Fraction & in) const { return (dval >= in.dval); }
71  bool operator <=(const Fraction & in) const { return (dval <= in.dval); }
72  Fraction & operator +=(const Fraction &tmp);
73  Fraction & operator -=(const Fraction &tmp);
74  Fraction & operator %=(const Fraction &tmp);
75  Fraction & operator *=(const Fraction &tmp);
76  Fraction & operator *=(const int tmp);
77 
78  private:
79  long long numerator;
80  long long denominator;
81  double dval;
82 };
83 
84 std::ostream& operator<< (std::ostream& os, const Fraction& f);
85 
86 
87 //## Other Operations (inline)
88 inline Fraction::operator float() const { return (float)dval; }
89 inline Fraction::operator double() const { return dval; }
90 
91 inline int Fraction::getNumerator() const { return (int)numerator; }
92 inline int Fraction::getDenominator() const { return (int)denominator; }
93 
94 Fraction operator +(const Fraction & tmp1, const Fraction & tmp);
95 Fraction operator -(const Fraction & tmp1, const Fraction & tmp);
96 Fraction operator *(const Fraction & tmp1, const Fraction & tmp);
97 Fraction operator *(const Fraction & tmp1, const int multiplier);
98 Fraction operator %(const Fraction & tmp1, const Fraction & tmp2);
99 
100 extern const Fraction Frac_n1;
101 extern const Fraction Frac_0;
102 extern const Fraction Frac_7_4;
103 extern const Fraction Frac_3_2;
104 extern const Fraction Frac_1;
105 extern const Fraction Frac_7_8;
106 extern const Fraction Frac_3_4;
107 extern const Fraction Frac_1_2;
108 extern const Fraction Frac_7_16;
109 extern const Fraction Frac_3_8;
110 extern const Fraction Frac_1_4;
111 extern const Fraction Frac_7_32;
112 extern const Fraction Frac_3_16;
113 extern const Fraction Frac_1_8;
114 extern const Fraction Frac_7_64;
115 extern const Fraction Frac_3_32;
116 extern const Fraction Frac_3_64;
117 extern const Fraction Frac_3_128;
118 extern const Fraction Frac_7_128;
119 extern const Fraction Frac_7_256;
120 extern const Fraction Frac_1_12;
121 extern const Fraction Frac_1_16;
122 extern const Fraction Frac_1_32;
123 extern const Fraction Frac_1_64;
124 extern const Fraction Frac_1_128;
125 extern const Fraction Frac_Max;
126 
127 
128 #endif
129 
Fraction::isOdd
bool isOdd() const
Fraction::setDenominator
void setDenominator(long long newDenominator)
Fraction::isMultiple
int isMultiple(int n)
Fraction::operator<=
bool operator<=(const Fraction &in) const
Definition: Fraction.h:71
Fraction
Numerator and denominator.
Definition: Fraction.h:23
Fraction::normalize
void normalize()
Fraction::getBiggestFullNote
Fraction getBiggestFullNote(int exp) const
Fraction::operator<
bool operator<(const Fraction &in) const
Definition: Fraction.h:69
Fraction::operator%=
Fraction & operator%=(const Fraction &tmp)
Fraction::operator*=
Fraction & operator*=(const Fraction &tmp)
Fraction::operator+=
Fraction & operator+=(const Fraction &tmp)
Fraction::Fraction
Fraction()
Definition: Fraction.h:27
Fraction::getDenominator
int getDenominator() const
Definition: Fraction.h:92
Fraction::gcd
static long long gcd(long long i1, long long i2)
Fraction::scm
static long long scm(long long i1, long long i2)
Fraction::operator>=
bool operator>=(const Fraction &in) const
Definition: Fraction.h:70
Fraction::operator-=
Fraction & operator-=(const Fraction &tmp)
Fraction::set
void set(long long num, long long denom=1)
Fraction::setNumerator
void setNumerator(long long newNumerator)
Fraction::add
void add(const Fraction &tmp)
Fraction::print
void print(std::ostream &) const
Fraction::Fraction
Fraction(int value)
Definition: Fraction.h:31
Fraction::isEven
bool isEven() const
Fraction::operator>
bool operator>(const Fraction &in) const
Definition: Fraction.h:66
operator<<
std::ostream & operator<<(std::ostream &os, const svgendl &eol)
Fraction::invert
void invert()
Fraction::operator==
bool operator==(const Fraction &in) const
Definition: Fraction.h:67
Fraction::getNumerator
int getNumerator() const
Definition: Fraction.h:91
Fraction::operator!=
bool operator!=(const Fraction &in) const
Definition: Fraction.h:68
Fraction::getReallySmallerNote
Fraction getReallySmallerNote(int exp) const

Guido Project Copyright © 2019 Grame-CNCM