mirror of https://github.com/sbt/sbt.git
43 lines
1.3 KiB
Scala
43 lines
1.3 KiB
Scala
|
|
/* sbt -- Simple Build Tool
|
||
|
|
* Copyright 2008,2010 Mark Harrah
|
||
|
|
*/
|
||
|
|
package sbt.parse
|
||
|
|
|
||
|
|
sealed trait UpperBound
|
||
|
|
{
|
||
|
|
/** True if and only if the given value meets this bound.*/
|
||
|
|
def >=(min: Int): Boolean
|
||
|
|
/** True if and only if this bound is one.*/
|
||
|
|
def isOne: Boolean
|
||
|
|
/** True if and only if this bound is zero.*/
|
||
|
|
def isZero: Boolean
|
||
|
|
/** If this bound is zero or Infinite, `decrement` returns this bound.
|
||
|
|
* Otherwise, this bound is finite and nonzero, and `decrement` returns the bound that is one less than this bound.*/
|
||
|
|
def decrement: UpperBound
|
||
|
|
/** True if and only if this is unbounded.*/
|
||
|
|
def isInfinite: Boolean
|
||
|
|
}
|
||
|
|
/** Represents unbounded. */
|
||
|
|
case object Infinite extends UpperBound
|
||
|
|
{
|
||
|
|
/** All finite numbers meet this bound. */
|
||
|
|
def >=(min: Int) = true
|
||
|
|
def isOne = false
|
||
|
|
def isZero = false
|
||
|
|
def decrement = this
|
||
|
|
def isInfinite = true
|
||
|
|
override def toString = "Infinity"
|
||
|
|
}
|
||
|
|
/** Represents a finite upper bound. The maximum allowed value is 'value', inclusive.
|
||
|
|
* It must positive. */
|
||
|
|
final case class Finite(value: Int) extends UpperBound
|
||
|
|
{
|
||
|
|
assume(value > 0, "Maximum occurences must be positive.")
|
||
|
|
|
||
|
|
def >=(min: Int) = value >= min
|
||
|
|
def isOne = value == 1
|
||
|
|
def isZero = value == 0
|
||
|
|
def decrement = Finite( (value - 1) max 0 )
|
||
|
|
def isInfinite = false
|
||
|
|
override def toString = value.toString
|
||
|
|
}
|