diff options
author | Grzegorz Kossakowski <grek@google.com> | 2009-08-05 21:26:56 -0700 |
---|---|---|
committer | Grzegorz Kossakowski <grek@google.com> | 2009-08-06 15:33:15 -0700 |
commit | c49bbaf5311c408bfb5323f3dd13fc26dc1f7c8e (patch) | |
tree | 472941d2b733e9873229ee2bcc980e9f41907cd3 | |
parent | c71f4dba231216109a3a39412b97296c21b00797 (diff) | |
download | gimd-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.scala | 11 | ||||
-rw-r--r-- | src/main/scala/com/google/gimd/text/Formatter.scala | 2 |
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) = { |