1 #ifndef IMPORTMIDI_FRACTION_H
2 #define IMPORTMIDI_FRACTION_H
3 
4 #include "libmscore/fraction.h"
5 
6 
7 namespace Ms {
8 
9 class ReducedFraction
10       {
11    public:
12       ReducedFraction();
13       ReducedFraction(int z, int n);
14       explicit ReducedFraction(const Fraction &);
15 
fraction()16       Fraction fraction() const { return Fraction(numerator_, denominator_); }
numerator()17       int numerator() const { return numerator_; }
denominator()18       int denominator() const { return denominator_; }
19 
20       static ReducedFraction fromTicks(int ticks);
21       ReducedFraction reduced() const;
absValue()22       ReducedFraction absValue() const { return ReducedFraction(qAbs(numerator_), qAbs(denominator_)); }
toDouble()23       double toDouble() const { return numerator_ * 1.0 / denominator_; }
24       int ticks() const;
25       void reduce();
isIdenticalTo(const ReducedFraction & f)26       bool isIdenticalTo(const ReducedFraction &f) const
27                         { return (f.numerator_ == numerator_ && f.denominator_ == denominator_); }
28 
29       ReducedFraction& operator+=(const ReducedFraction&);
30       ReducedFraction& operator-=(const ReducedFraction&);
31       ReducedFraction& operator*=(const ReducedFraction&);
32       ReducedFraction& operator*=(int);
33       ReducedFraction& operator/=(const ReducedFraction&);
34       ReducedFraction& operator/=(int);
35 
36       ReducedFraction operator+(const ReducedFraction& v) const { return ReducedFraction(*this) += v; }
37       ReducedFraction operator-(const ReducedFraction& v) const { return ReducedFraction(*this) -= v; }
38       ReducedFraction operator*(const ReducedFraction& v) const { return ReducedFraction(*this) *= v; }
39       ReducedFraction operator*(int v)                    const { return ReducedFraction(*this) *= v; }
40       ReducedFraction operator/(const ReducedFraction& v) const { return ReducedFraction(*this) /= v; }
41       ReducedFraction operator/(int v)                    const { return ReducedFraction(*this) /= v; }
42 
43       bool operator<(const ReducedFraction&) const;
44       bool operator<=(const ReducedFraction&) const;
45       bool operator>=(const ReducedFraction&) const;
46       bool operator>(const ReducedFraction&) const;
47       bool operator==(const ReducedFraction&) const;
48       bool operator!=(const ReducedFraction&) const;
49 
50    private:
51       void preventOverflow();
52 
53       int numerator_;
54       int denominator_;
55       };
56 
57 ReducedFraction toMuseScoreTicks(int tick, int oldDivision, bool isDivisionInTps);
58 
59 } // namespace Ms
60 
61 
62 #endif // IMPORTMIDI_FRACTION_H
63