summaryrefslogtreecommitdiffstats
path: root/pokemod/Fraction.cpp
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2008-08-18 18:51:31 +0000
committerBen Boeckel <MathStuf@gmail.com>2008-08-18 18:51:31 +0000
commitc1793a87ebea8c8e1bb2d5d1a409d105bfae3871 (patch)
treeb7ff53cf9747ad61a80b169e1adad96950f4b16c /pokemod/Fraction.cpp
parentfa4764c9e4d86fdfa976bb9fa9f6976e82c496d5 (diff)
downloadsigen-c1793a87ebea8c8e1bb2d5d1a409d105bfae3871.tar.gz
sigen-c1793a87ebea8c8e1bb2d5d1a409d105bfae3871.tar.xz
sigen-c1793a87ebea8c8e1bb2d5d1a409d105bfae3871.zip
[FIX] Script to make a tarball now defaults to HEAD for the revision
[FIX] Enumeration types used to help remove some checks [FIX] Macro code moved to static members of Object (not all though) [FIX] Scripting wrappers now share information by keeping track of already-created instances of the wrapper [FIX] Scripting methods are now Q_SCRIPTABLE and not slots git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@239 6ecfd1a5-f3ed-3746-8530-beee90d26b22
Diffstat (limited to 'pokemod/Fraction.cpp')
-rw-r--r--pokemod/Fraction.cpp117
1 files changed, 117 insertions, 0 deletions
diff --git a/pokemod/Fraction.cpp b/pokemod/Fraction.cpp
index a3075775..33c9add0 100644
--- a/pokemod/Fraction.cpp
+++ b/pokemod/Fraction.cpp
@@ -18,6 +18,45 @@
// Header include
#include "Fraction.h"
+Pokemod::Fraction::Fraction(const int numerator, const int denominator)
+{
+ set(numerator, denominator);
+ reduce();
+}
+
+Pokemod::Fraction::Fraction(const Fraction& fraction)
+{
+ set(fraction.numerator(), fraction.denominator());
+ reduce();
+}
+
+void Pokemod::Fraction::set(const int numerator, const int denominator)
+{
+ m_numerator = numerator;
+ m_denominator = denominator;
+ normalize();
+}
+
+void Pokemod::Fraction::setNumerator(const int numerator)
+{
+ set(numerator, m_denominator);
+}
+
+void Pokemod::Fraction::setDenominator(const int denominator)
+{
+ set(m_numerator, denominator);
+}
+
+int Pokemod::Fraction::numerator() const
+{
+ return m_numerator;
+}
+
+int Pokemod::Fraction::denominator() const
+{
+ return m_denominator;
+}
+
void Pokemod::Fraction::reduce()
{
if (!m_numerator || !m_denominator)
@@ -31,3 +70,81 @@ void Pokemod::Fraction::reduce()
m_numerator /= i;
m_denominator /= i;
}
+
+bool Pokemod::Fraction::poll() const
+{
+ return (qrand() % m_denominator) < m_numerator;
+}
+
+Pokemod::Fraction& Pokemod::Fraction::operator=(const Fraction& rhs)
+{
+ if (this == &rhs)
+ return *this;
+ m_numerator = rhs.m_numerator;
+ m_denominator = rhs.m_denominator;
+ return *this;
+}
+
+Pokemod::Fraction::operator double() const
+{
+ return (double(m_numerator) / m_denominator);
+}
+
+Pokemod::Fraction Pokemod::Fraction::operator+(const Fraction& rhs) const
+{
+ return Fraction((m_numerator * rhs.m_denominator) + (m_denominator * rhs.m_numerator), m_denominator * rhs.m_denominator);
+}
+
+Pokemod::Fraction Pokemod::Fraction::operator-(const Fraction& rhs) const
+{
+ return Fraction((m_numerator * rhs.m_denominator) - (m_denominator * rhs.m_numerator), m_denominator * rhs.m_denominator);
+}
+
+Pokemod::Fraction Pokemod::Fraction::operator*(const Fraction& rhs) const
+{
+ return Fraction(m_numerator * rhs.m_numerator, m_denominator * rhs.m_denominator);
+}
+
+Pokemod::Fraction Pokemod::Fraction::operator/(const Fraction& rhs) const
+{
+ return Fraction(m_numerator * rhs.m_denominator, m_denominator * rhs.m_numerator);
+}
+
+Pokemod::Fraction& Pokemod::Fraction::operator+=(const Fraction& rhs)
+{
+ return *this = *this + rhs;
+}
+
+Pokemod::Fraction& Pokemod::Fraction::operator-=(const Fraction& rhs)
+{
+ return *this = *this - rhs;
+}
+
+Pokemod::Fraction& Pokemod::Fraction::operator*=(const Fraction& rhs)
+{
+ return *this = *this * rhs;
+}
+
+Pokemod::Fraction& Pokemod::Fraction::operator/=(const Fraction& rhs)
+{
+ return *this = *this / rhs;
+}
+
+bool Pokemod::Fraction::operator==(const Fraction& rhs) const
+{
+ return ((m_numerator == rhs.m_numerator) && (m_denominator == rhs.m_denominator));
+}
+
+bool Pokemod::Fraction::operator!=(const Fraction& rhs) const
+{
+ return !(*this == rhs);
+}
+
+void Pokemod::Fraction::normalize()
+{
+ if (m_denominator < 0)
+ {
+ m_denominator = -m_denominator;
+ m_numerator = -m_numerator;
+ }
+}