mirror of https://github.com/sbt/sbt.git
47 lines
1.4 KiB
Scala
47 lines
1.4 KiB
Scala
/* sbt -- Simple Build Tool
|
|
* Copyright 2008,2010 Mark Harrah
|
|
*/
|
|
package sbt.complete
|
|
|
|
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 greater than zero 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 nonnegative.")
|
|
|
|
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
|
|
}
|
|
object UpperBound
|
|
{
|
|
implicit def intToFinite(i: Int): Finite = Finite(i)
|
|
} |