Merge branch 'snapshots'
[aquarium] / src / main / scala / gr / grnet / aquarium / Real.scala
diff --git a/src/main/scala/gr/grnet/aquarium/Real.scala b/src/main/scala/gr/grnet/aquarium/Real.scala
new file mode 100644 (file)
index 0000000..b0a3c8c
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ *
+ *  * Copyright 2011-2012 GRNET S.A. All rights reserved.
+ *  *
+ *  * Redistribution and use in source and binary forms, with or
+ *  * without modification, are permitted provided that the following
+ *  * conditions are met:
+ *  *
+ *  *   1. Redistributions of source code must retain the above
+ *  *      copyright notice, this list of conditions and the following
+ *  *      disclaimer.
+ *  *
+ *  *   2. Redistributions in binary form must reproduce the above
+ *  *      copyright notice, this list of conditions and the following
+ *  *      disclaimer in the documentation and/or other materials
+ *  *      provided with the distribution.
+ *  *
+ *  * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
+ *  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ *  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ *  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
+ *  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ *  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ *  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ *  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ *  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ *  * POSSIBILITY OF SUCH DAMAGE.
+ *  *
+ *  * The views and conclusions contained in the software and
+ *  * documentation are those of the authors and should not be
+ *  * interpreted as representing official policies, either expressed
+ *  * or implied, of GRNET S.A.
+ *
+ */
+
+package gr.grnet.aquarium
+
+import java.math.{RoundingMode, MathContext}
+
+/**
+ *
+ * @author Christos KK Loverdos <loverdos@gmail.com>
+ */
+final object Real {
+  final val DefaultMathContext = new java.math.MathContext(50, RoundingMode.HALF_UP)
+
+  final val Zero = Real(0)
+  final val One  = Real(1)
+  final val _1K  = Real(1024)
+  final val _1M  = _1K * _1K
+  final val _1G  = _1M * _1K
+
+  final val HourMillis = Real(1000L * 60 * 60)
+  final val HourMillisInverse = Real.One / HourMillis
+  final val MB = _1M
+  final val MBInverse = One / MB
+  final val GB = _1G
+  final val GBInverse = One / GB
+
+
+  @inline final def apply(v: java.math.BigDecimal): Real = {
+    new scala.math.BigDecimal(v, DefaultMathContext)
+  }
+
+  @inline final def apply(v: String): Real = Real apply (new java.math.BigDecimal(v))
+
+  @inline final def apply(v: Double): Real = Real apply (new java.math.BigDecimal(v))
+
+  @inline final def apply(v: Long): Real = Real apply (new java.math.BigDecimal(v))
+
+  @inline final def apply(v: Int): Real = Real apply (new java.math.BigDecimal(v))
+
+  @inline final def toMsgField(v: Real): String = v.toString()
+
+  @inline final def toMsgField(v: Double): String = v.toString()
+
+  @inline final def fromMsgField(v: String): Real = this(v)
+}
+
+