summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Kossakowski <grek@google.com>2009-08-05 21:26:56 -0700
committerGrzegorz Kossakowski <grek@google.com>2009-08-06 15:33:15 -0700
commitc49bbaf5311c408bfb5323f3dd13fc26dc1f7c8e (patch)
tree472941d2b733e9873229ee2bcc980e9f41907cd3
parentc71f4dba231216109a3a39412b97296c21b00797 (diff)
downloadgimd-c49bbaf5311c408bfb5323f3dd13fc26dc1f7c8e.tar.gz
Introduce MinimumField and MaximumField.
These are two special types of Fields that are used as special values for order accordingly as minimal and maximal value. These fields are very handy in order to define operations on ranges. Signed-off-by: Grzegorz Kossakowski <grek@google.com>
-rw-r--r--src/main/scala/com/google/gimd/Field.scala11
-rw-r--r--src/main/scala/com/google/gimd/text/Formatter.scala2
2 files changed, 13 insertions, 0 deletions
diff --git a/src/main/scala/com/google/gimd/Field.scala b/src/main/scala/com/google/gimd/Field.scala
index f04eaa0..c6d9112 100644
--- a/src/main/scala/com/google/gimd/Field.scala
+++ b/src/main/scala/com/google/gimd/Field.scala
@@ -51,10 +51,12 @@ abstract sealed case class Field() extends Ordered[Field] with Comparable[Field]
}
private def domainOrder = this match {
+ case a: MinimumField => -1
case a: NumberField => 0
case a: TimestampField => 1
case a: StringField => 2
case a: MessageField => 3
+ case a: MaximumField => 4
}
private def cmp(a: BigDecimal, b: BigDecimal) = {
@@ -122,3 +124,12 @@ sealed case class BigDecimalField(name: String, value: BigDecimal) extends Numbe
def toBigDecimal = value
override def bigDecimalField = this
}
+
+/**
+ * Minimum field is a special field domain that is minimal in domain order
+ */
+sealed case class MinimumField(name: String) extends Field
+/**
+ * Maximum field is a special field domain that is miximal in domain order
+ */
+sealed case class MaximumField(name: String) extends Field
diff --git a/src/main/scala/com/google/gimd/text/Formatter.scala b/src/main/scala/com/google/gimd/text/Formatter.scala
index c74d892..a532ceb 100644
--- a/src/main/scala/com/google/gimd/text/Formatter.scala
+++ b/src/main/scala/com/google/gimd/text/Formatter.scala
@@ -84,6 +84,8 @@ class Formatter {
case b: BigDecimalField => buf.append(format(b.value.bigDecimal))
case n: NumberField => buf.append(n.toNumber.toString)
case t: TimestampField => formatValue(t.value)
+ case min: MinimumField => throw new IllegalArgumentException("Cannot format field " + min)
+ case max: MaximumField => throw new IllegalArgumentException("Cannot format field " + max)
}
private def nested(level: Int, m: Message) = {