src/Pure/General/linear_set.scala
changeset 73359 d8a0e996614b
parent 73340 0ffcad1f6130
child 73362 dde25151c3c1
equal deleted inserted replaced
73358:78aa7846e91f 73359:d8a0e996614b
    16 object Linear_Set extends IterableFactory[Linear_Set]
    16 object Linear_Set extends IterableFactory[Linear_Set]
    17 {
    17 {
    18   private val empty_val: Linear_Set[Nothing] = new Linear_Set[Nothing](None, None, Map(), Map())
    18   private val empty_val: Linear_Set[Nothing] = new Linear_Set[Nothing](None, None, Map(), Map())
    19   override def empty[A]: Linear_Set[A] = empty_val.asInstanceOf[Linear_Set[A]]
    19   override def empty[A]: Linear_Set[A] = empty_val.asInstanceOf[Linear_Set[A]]
    20 
    20 
    21   def from[A](entries: IterableOnce[A]): Linear_Set[A] = (empty[A] /: entries)(_.incl(_))
    21   def from[A](entries: IterableOnce[A]): Linear_Set[A] = entries.foldLeft(empty[A])(_.incl(_))
    22 
    22 
    23   override def newBuilder[A]: mutable.Builder[A, Linear_Set[A]] = new Builder[A]
    23   override def newBuilder[A]: mutable.Builder[A, Linear_Set[A]] = new Builder[A]
    24   private class Builder[A] extends mutable.Builder[A, Linear_Set[A]]
    24   private class Builder[A] extends mutable.Builder[A, Linear_Set[A]]
    25   {
    25   {
    26     private var res = empty[A]
    26     private var res = empty[A]
    81                   prevs + (elem2 -> elem) + (elem -> elem1))
    81                   prevs + (elem2 -> elem) + (elem -> elem1))
    82             }
    82             }
    83       }
    83       }
    84 
    84 
    85   def append_after(hook: Option[A], elems: Iterable[A]): Linear_Set[A] =  // FIXME reverse fold
    85   def append_after(hook: Option[A], elems: Iterable[A]): Linear_Set[A] =  // FIXME reverse fold
    86     ((hook, this) /: elems) {
    86     elems.foldLeft((hook, this)) {
    87       case ((last, set), elem) => (Some(elem), set.insert_after(last, elem))
    87       case ((last, set), elem) => (Some(elem), set.insert_after(last, elem))
    88     }._2
    88     }._2
    89 
    89 
    90   def delete_after(hook: Option[A]): Linear_Set[A] =
    90   def delete_after(hook: Option[A]): Linear_Set[A] =
    91     hook match {
    91     hook match {