src/Pure/General/linear_set.scala
changeset 48746 9e1b2aafbc7f
parent 46712 8650d9a95736
child 48747 ebfe3dd9f3f7
--- a/src/Pure/General/linear_set.scala	Thu Aug 09 17:13:46 2012 +0200
+++ b/src/Pure/General/linear_set.scala	Thu Aug 09 19:37:42 2012 +0200
@@ -34,6 +34,8 @@
 {
   override def companion: GenericCompanion[Linear_Set] = Linear_Set
 
+  def reverse: Linear_Set[A] = new Linear_Set(end, start, prevs, nexts)
+
 
   /* relative addressing */
 
@@ -132,26 +134,22 @@
   def contains(elem: A): Boolean =
     !isEmpty && (end.get == elem || nexts.isDefinedAt(elem))
 
-  private def make_iterator(from: Option[A], which: Map[A, A]): Iterator[A] = new Iterator[A] {
+  private def make_iterator(from: Option[A]): Iterator[A] = new Iterator[A] {
     private var next_elem = from
     def hasNext(): Boolean = next_elem.isDefined
     def next(): A =
       next_elem match {
         case Some(elem) =>
-          next_elem = which.get(elem)
+          next_elem = nexts.get(elem)
           elem
         case None => Iterator.empty.next()
       }
   }
 
-  override def iterator: Iterator[A] = make_iterator(start, nexts)
+  override def iterator: Iterator[A] = make_iterator(start)
 
   def iterator(elem: A): Iterator[A] =
-    if (contains(elem)) make_iterator(Some(elem), nexts)
-    else throw new Linear_Set.Undefined(elem)
-
-  def reverse_iterator(elem: A): Iterator[A] =
-    if (contains(elem)) make_iterator(Some(elem), prevs)
+    if (contains(elem)) make_iterator(Some(elem))
     else throw new Linear_Set.Undefined(elem)
 
   def + (elem: A): Linear_Set[A] = insert_after(end, elem)