Skip to content

Commit

Permalink
Move Num operators from Real.pm to Num.pm.
Browse files Browse the repository at this point in the history
  • Loading branch information
colomon committed Jun 12, 2010
1 parent 20a512b commit 006bdf0
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 65 deletions.
76 changes: 68 additions & 8 deletions src/core/Num.pm
Expand Up @@ -69,28 +69,28 @@ augment class Num does Real {
~self;
}

method ceiling(Num $x:) {
method sqrt(Num $x:) {
pir::sqrt__Nn($x);
}

method floor(Real $x:) {
given $x {
when NaN { NaN }
when Inf { Inf }
when -Inf { -Inf }
pir::box__PI(pir::ceil__IN($x));
pir::box__PI(pir::floor__IN($x));
}
}

method floor(Real $x:) {
method ceiling(Num $x:) {
given $x {
when NaN { NaN }
when Inf { Inf }
when -Inf { -Inf }
pir::box__PI(pir::floor__IN($x));
pir::box__PI(pir::ceil__IN($x));
}
}

method sqrt(Num $x:) {
pir::sqrt__Nn($x);
}

method sin(Num $x: $base = Radians) {
pir::sin__Nn($x.to-radians($base));
}
Expand Down Expand Up @@ -192,4 +192,64 @@ augment class Num does Real {
}
}

multi sub infix:«<=>»(Num $a, Num $b) {
# TODO: should be Order::Same, ::Increase, ::Decrease once they work
if $a == $b {
0;
} else {
$a < $b ?? -1 !! 1;
}
}

multi sub infix==»(Num $a, Num $b) {
pir::iseq__INN( $a, $b) ?? True !! False
}

multi sub infix!=»(Num $a, Num $b) {
pir::iseq__INN( $a, $b) ?? False !! True # note reversed
}

multi sub infix<»(Num $a, Num $b) {
pir::islt__INN( $a, $b) ?? True !! False
}

multi sub infix>»(Num $a, Num $b) {
pir::isgt__INN( $a, $b) ?? True !! False
}

multi sub infix<=»(Num $a, Num $b) {
pir::isgt__INN( $a, $b) ?? False !! True # note reversed
}

multi sub infix>=»(Num $a, Num $b) {
pir::islt__INN( $a, $b) ?? False !! True # note reversed
}

# Arithmetic operators

multi sub prefix:<->(Num $a) {
pir::neg__NN($a);
}

multi sub infix:<+>(Num $a, Num $b) {
pir::add__NNN($a, $b)
}

multi sub infix:<->(Num $a, Num $b) {
pir::sub__NNN($a, $b)
}

multi sub infix:<*>(Num $a, Num $b) {
pir::mul__NNN($a, $b)
}

multi sub infix:</>(Num $a, Num $b) {
pir::div__NNN($a, $b)
}

multi sub infix:<**>(Num $a, Num $b) {
pir::pow__NNN($a, $b)
}


# vim: ft=perl6
57 changes: 0 additions & 57 deletions src/core/Real.pm
Expand Up @@ -195,105 +195,52 @@ multi sub infix:«<=>»(Real $a, Real $b) {
$a.Bridge <=> $b.Bridge;
}

multi sub infix:«<=>»(Num $a, Num $b) {
# TODO: should be Order::Same, ::Increase, ::Decrease once they work
if $a == $b {
0;
} else {
$a < $b ?? -1 !! 1;
}
}

multi sub infix==»(Real $a, Real $b) {
$a.Bridge == $b.Bridge;
}

multi sub infix==»(Num $a, Num $b) {
pir::iseq__INN( $a, $b) ?? True !! False
}

multi sub infix!=»(Real $a, Real $b) {
$a.Bridge != $b.Bridge;
}

multi sub infix!=»(Num $a, Num $b) {
pir::iseq__INN( $a, $b) ?? False !! True # note reversed
}

multi sub infix<»(Real $a, Real $b) {
$a.Bridge < $b.Bridge;
}

multi sub infix<»(Num $a, Num $b) {
pir::islt__INN( $a, $b) ?? True !! False
}

multi sub infix>»(Real $a, Real $b) {
$a.Bridge > $b.Bridge;
}

multi sub infix>»(Num $a, Num $b) {
pir::isgt__INN( $a, $b) ?? True !! False
}

multi sub infix<=»(Real $a, Real $b) {
$a.Bridge <= $b.Bridge;
}

multi sub infix<=»(Num $a, Num $b) {
pir::isgt__INN( $a, $b) ?? False !! True # note reversed
}

multi sub infix>=»(Real $a, Real $b) {
$a.Bridge >= $b.Bridge;
}

multi sub infix>=»(Num $a, Num $b) {
pir::islt__INN( $a, $b) ?? False !! True # note reversed
}

# Arithmetic operators

multi sub prefix:<->(Real $a) {
-($a.Bridge);
}

multi sub prefix:<->(Num $a) {
pir::neg__NN($a);
}

multi sub infix:<+>(Real $a, Real $b) {
$a.Bridge + $b.Bridge;
}

multi sub infix:<+>(Num $a, Num $b) {
pir::add__NNN($a, $b)
}

multi sub infix:<->(Real $a, Real $b) {
$a.Bridge - $b.Bridge;
}

multi sub infix:<->(Num $a, Num $b) {
pir::sub__NNN($a, $b)
}

multi sub infix:<*>(Real $a, Real $b) {
$a.Bridge * $b.Bridge;
}

multi sub infix:<*>(Num $a, Num $b) {
pir::mul__NNN($a, $b)
}

multi sub infix:</>(Real $a, Real $b) {
$a.Bridge / $b.Bridge;
}

multi sub infix:</>(Num $a, Num $b) {
pir::div__NNN($a, $b)
}

multi sub infix:<%>(Real $a, Real $b) {
# older version is pir::mod__NNN($a.Bridge, $b.Bridge)
$a - ($a / $b).floor * $b;
Expand All @@ -303,10 +250,6 @@ multi sub infix:<**>(Real $a, Real $b) {
$a.Bridge ** $b.Bridge;
}

multi sub infix:<**>(Num $a, Num $b) {
pir::pow__NNN($a, $b)
}

# NOTE: mod is only actually defined for integer types!
# But if you have an integer type that does Real, this
# should automatically define an appropriate mod for you.
Expand Down

0 comments on commit 006bdf0

Please sign in to comment.