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