summaryrefslogtreecommitdiff
path: root/src/library/scalax/Numeric.scala
diff options
context:
space:
mode:
authorAntonio Cunei <antonio.cunei@epfl.ch>2008-11-25 18:05:48 +0000
committerAntonio Cunei <antonio.cunei@epfl.ch>2008-11-25 18:05:48 +0000
commitaf47e5b433ea538bf096a176c88f3c91116e09cd (patch)
treeb3e66e93fb653570ebbef16183cf4f2be2111c12 /src/library/scalax/Numeric.scala
parent2d61f09332dbc6038f869c6a23a95dca1bc3b6c7 (diff)
downloadscala-af47e5b433ea538bf096a176c88f3c91116e09cd.tar.gz
scala-af47e5b433ea538bf096a176c88f3c91116e09cd.tar.bz2
scala-af47e5b433ea538bf096a176c88f3c91116e09cd.zip
Merging everything from the 2.8.x development b...
Merging everything from the 2.8.x development branch back to trunk. - If you were working on trunk, please keep working on trunk If you were - working on 2.8-devel, please switch to trunk now
Diffstat (limited to 'src/library/scalax/Numeric.scala')
-rwxr-xr-xsrc/library/scalax/Numeric.scala79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/library/scalax/Numeric.scala b/src/library/scalax/Numeric.scala
new file mode 100755
index 0000000000..6e61851dc5
--- /dev/null
+++ b/src/library/scalax/Numeric.scala
@@ -0,0 +1,79 @@
+package scalax
+
+object Numeric {
+ implicit object IntIsIntegral extends Integral[Int] {
+ def plus(x: Int, y: Int): Int = x + y
+ def minus(x: Int, y: Int): Int = x - y
+ def times(x: Int, y: Int): Int = x * y
+ def quot(x: Int, y: Int): Int = x / y
+ def rem(x: Int, y: Int): Int = x % y
+ def negate(x: Int): Int = -x
+ def abs(x: Int): Int = if (x < 0) -x else x
+ def signum(x: Int): Int = if (x < 0) -1 else if (x > 0) 1 else 0
+ def fromInt(x: Int): Int = x
+ def toInt(x: Int): Int = x
+ def toLong(x: Int): Long = x
+ def toFloat(x: Int): Float = x
+ def toDouble(x: Int): Double = x
+ }
+ implicit object LongIsIntegral extends Integral[Long] {
+ def plus(x: Long, y: Long): Long = x + y
+ def minus(x: Long, y: Long): Long = x - y
+ def times(x: Long, y: Long): Long = x * y
+ def quot(x: Long, y: Long): Long = x / y
+ def rem(x: Long, y: Long): Long = x % y
+ def negate(x: Long): Long = -x
+ def abs(x: Long): Long = if (x < 0) -x else x
+ def signum(x: Long): Long = if (x < 0) -1 else if (x > 0) 1 else 0
+ def fromInt(x: Int): Long = x
+ def toInt(x: Long): Int = x.toInt
+ def toLong(x: Long): Long = x
+ def toFloat(x: Long): Float = x
+ def toDouble(x: Long): Double = x
+ }
+ implicit object FloatIsFractional extends Fractional[Float] {
+ def plus(x: Float, y: Float): Float = x + y
+ def minus(x: Float, y: Float): Float = x - y
+ def times(x: Float, y: Float): Float = x * y
+ def div(x: Float, y: Float): Float = x / y
+ def negate(x: Float): Float = -x
+ def abs(x: Float): Float = if (x < 0) -x else x
+ def signum(x: Float): Float = if (x < 0) -1 else if (x > 0) 1 else 0
+ def fromInt(x: Int): Float = x
+ def toInt(x: Float): Int = x.toInt
+ def toLong(x: Float): Long = x.toLong
+ def toFloat(x: Float): Float = x
+ def toDouble(x: Float): Double = x
+ }
+ implicit object DoubleIsFractional extends Fractional[Double] {
+ def plus(x: Double, y: Double): Double = x + y
+ def minus(x: Double, y: Double): Double = x - y
+ def times(x: Double, y: Double): Double = x * y
+ def div(x: Double, y: Double): Double = x / y
+ def negate(x: Double): Double = -x
+ def abs(x: Double): Double = if (x < 0) -x else x
+ def signum(x: Double): Double = if (x < 0) -1 else if (x > 0) 1 else 0
+ def fromInt(x: Int): Double = x
+ def toInt(x: Double): Int = x.toInt
+ def toLong(x: Double): Long = x.toLong
+ def toFloat(x: Double): Float = x.toFloat
+ def toDouble(x: Double): Double = x
+ }
+}
+
+
+trait Numeric[T] {
+ def plus(x: T, y: T): T
+ def minus(x: T, y: T): T
+ def times(x: T, y: T): T
+ def negate(x: T): T
+ def abs(x: T): T
+ def signum(x: T): T
+ def fromInt(x: Int): T
+ def toInt(x: T): Int
+ def toLong(x: T): Long
+ def toFloat(x: T): Float
+ def toDouble(x: T): Double
+ def zero = fromInt(0)
+ def one = fromInt(1)
+}