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