28#include "musx/dom/Fundamentals.h"
47 int gcd = std::gcd(m_numerator, m_denominator);
52 if (m_denominator < 0) {
53 m_numerator = -m_numerator;
54 m_denominator = -m_denominator;
65 Fraction(
int num = 0,
int den = 1) : m_numerator(num), m_denominator(den) {
66 if (m_denominator == 0) {
67 throw std::invalid_argument(
"Denominator cannot be zero.");
93 return m_numerator / m_denominator;
101 return Fraction(m_numerator % m_denominator, m_denominator);
116 m_numerator * other.m_denominator + other.m_numerator * m_denominator,
117 m_denominator * other.m_denominator
128 m_numerator * other.m_denominator - other.m_numerator * m_denominator,
129 m_denominator * other.m_denominator
140 m_numerator * other.m_numerator,
141 m_denominator * other.m_denominator
152 if (other.m_numerator == 0) {
153 throw std::invalid_argument(
"Cannot divide by zero fraction.");
156 m_numerator * other.m_denominator,
157 m_denominator * other.m_numerator
167 *
this = *
this + other;
177 *
this = *
this - other;
187 *
this = *
this * other;
198 *
this = *
this / other;
212 return lhs.m_numerator == rhs.m_numerator && lhs.m_denominator == rhs.m_denominator;
221 return !(*
this == other);
230 double lhs =
static_cast<double>(m_numerator) / m_denominator;
231 double rhs =
static_cast<double>(other.m_numerator) / other.m_denominator;
241 return *
this < other || *
this == other;
250 return !(*
this <= other);
259 return !(*
this < other);
266 explicit operator bool()
const {
267 return m_numerator != 0;
277 os << frac.m_numerator;
278 if (frac.m_denominator != 1) {
279 os <<
"/" << frac.m_denominator;
294 is >> num >> sep >> den;
295 if (sep !=
'/' || den == 0) {
296 throw std::invalid_argument(
"Invalid fraction format or zero m_denominator.");
A class to represent fractions with integer m_numerator and m_denominator, automatically reduced to s...
Definition Fraction.h:37
bool operator<(const Fraction &other) const
Less-than comparison operator.
Definition Fraction.h:229
Fraction remainder() const
Returns the fractional part of the fraction.
Definition Fraction.h:100
int numerator() const
Gets the m_numerator of the fraction.
Definition Fraction.h:80
int quotient() const
Returns the integer (whole number) part of the fraction.
Definition Fraction.h:92
Fraction operator+(const Fraction &other) const
Adds two fractions.
Definition Fraction.h:114
Fraction(int num=0, int den=1)
Constructs a Fraction object.
Definition Fraction.h:65
static Fraction fromEdu(int edu)
Constructs a Fraction from edu.
Definition Fraction.cpp:31
bool operator>(const Fraction &other) const
Greater-than comparison operator.
Definition Fraction.h:249
bool operator>=(const Fraction &other) const
Greater-than-or-equal-to comparison operator.
Definition Fraction.h:258
dom::Edu calcEduDuration() const
Calculates duration as a fraction of a whole note.
Definition Fraction.cpp:36
bool operator<=(const Fraction &other) const
Less-than-or-equal-to comparison operator.
Definition Fraction.h:240
bool operator==(const Fraction &other) const
Equality comparison operator.
Definition Fraction.h:207
Fraction & operator+=(const Fraction &other)
Compound addition assignment operator.
Definition Fraction.h:166
Fraction operator*(const Fraction &other) const
Multiplies two fractions.
Definition Fraction.h:138
friend std::ostream & operator<<(std::ostream &os, const Fraction &frac)
Stream output operator.
Definition Fraction.h:276
friend std::istream & operator>>(std::istream &is, Fraction &frac)
Stream input operator.
Definition Fraction.h:291
Fraction & operator*=(const Fraction &other)
Compound multiplication assignment operator.
Definition Fraction.h:186
bool operator!=(const Fraction &other) const
Inequality comparison operator.
Definition Fraction.h:220
Fraction & operator-=(const Fraction &other)
Compound subtraction assignment operator.
Definition Fraction.h:176
Fraction operator-(const Fraction &other) const
Subtracts one fraction from another.
Definition Fraction.h:126
Fraction operator/(const Fraction &other) const
Divides one fraction by another.
Definition Fraction.h:151
Fraction & operator/=(const Fraction &other)
Compound division assignment operator.
Definition Fraction.h:197
int denominator() const
Gets the m_denominator of the fraction.
Definition Fraction.h:86
int32_t Edu
"Enigma Durational Units" value (1024 per quarter note)
Definition Fundamentals.h:61
object model for musx file (enigmaxml)
Definition BaseClasses.h:32