summaryrefslogtreecommitdiff
path: root/MLKRatio.m
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <matthias@benkard.de>2008-07-29 19:56:21 +0200
committerMatthias Andreas Benkard <matthias@benkard.de>2008-07-29 19:56:21 +0200
commit9c3236394224167b31eeb402fa78928a0e3eb7fe (patch)
treedc76fdd35091dba953e62e1d737701292bb6f26d /MLKRatio.m
parent5df0d8d27dae228d9568de691ca434194170d1ac (diff)
Add a non-trivial number of arithmetic methods to number classes.
Diffstat (limited to 'MLKRatio.m')
-rw-r--r--MLKRatio.m42
1 files changed, 42 insertions, 0 deletions
diff --git a/MLKRatio.m b/MLKRatio.m
index 604b457..4b0b23e 100644
--- a/MLKRatio.m
+++ b/MLKRatio.m
@@ -89,6 +89,48 @@ DEFINE_MPQ_TWOARG_OPERATION (divideBy:, mpq_div)
return mpq_get_d (value);
}
+-(MLKInteger *) numerator
+{
+ mpz_t numer;
+ MLKInteger *obj;
+
+ mpz_init_set (numer, mpq_numref (self->value));
+ obj = [MLKInteger integerWithMPZ:numer];
+ mpz_clear (numer);
+
+ return obj;
+}
+
+-(MLKInteger *) denominator
+{
+ mpz_t denom;
+ MLKInteger *obj;
+
+ mpz_init_set (denom, mpq_denref (self->value));
+ obj = [MLKInteger integerWithMPZ:denom];
+ mpz_clear (denom);
+
+ return obj;
+}
+
+-(NSComparisonResult) compare:(MLKRatio *)arg
+{
+ int cmp = mpq_cmp (self->value, arg->value);
+
+ if (cmp == 0)
+ return NSOrderedSame;
+ else if (cmp < 0)
+ return NSOrderedAscending;
+ else
+ return NSOrderedDescending;
+}
+
+-(BOOL) isEqual:(id)arg
+{
+ return ([arg isKindOfClass:[MLKRatio class]]
+ && mpq_equal (self->value, ((MLKRatio *)arg)->value));
+}
+
-(NSString *) description
{
return [self descriptionWithBase:10];