Files
odc-analyzer/app/com/ysoft/odc/SetDiff.scala
2016-04-07 14:46:44 +02:00

39 lines
1000 B
Scala

package com.ysoft.odc
import com.ysoft.odc.SetDiff.Selection
object SetDiff{
sealed abstract class Selection
object Selection{
case object None extends Selection
case object Both extends Selection
case object Old extends Selection
case object New extends Selection
}
}
class SetDiff[T](val oldSet: Set[T], val newSet: Set[T]) {
lazy val added = newSet -- oldSet
lazy val removed = oldSet -- newSet
lazy val isEmpty = newSet == oldSet
def nonEmpty = !isEmpty
def map[U](f: T => U): SetDiff[U] = new SetDiff[U](
oldSet = oldSet.map(f),
newSet = newSet.map(f)
)
private def setPair(oldSetBool: Boolean, newSetBool: Boolean) = (oldSetBool, newSetBool) match {
case (false, false) => Selection.None
case (false, true) => Selection.New
case (true, false) => Selection.Old
case (true, true) => Selection.Both
}
def whichNonEmpty = setPair(oldSet.nonEmpty, newSet.nonEmpty)
def whichEmpty = setPair(oldSet.isEmpty, newSet.isEmpty)
}