Merge: More keep going
[nit.git] / lib / standard / collection / list.nit
index 0c5ce5f..2cdc431 100644 (file)
@@ -18,7 +18,9 @@ import abstract_collection
 # Double linked lists.
 class List[E]
        super Sequence[E]
+
 # Access
+
        redef fun [](index) do return get_node(index).item
 
        redef fun []=(index, item) do get_node(index).item = item
@@ -124,20 +126,11 @@ class List[E]
                        push(e)
                        return
                end
-               var nnode = new ListNode[E](e)
-               var next = node.next
-               if next == null then
-                       _tail = nnode
-               else
-                       next.prev = nnode
-               end
-               nnode.prev = node
-               nnode.next = next
-               node.next = nnode
+               insert_before(e, node)
        end
 
        # Append `l` to `self` but clear `l`.
-       ##
+       #
        # O(1)
        fun link(l: List[E])
        do
@@ -210,10 +203,10 @@ class List[E]
        init from(coll: Collection[E]) do append(coll)
 
        # The first node of the list
-       var _head: nullable ListNode[E]
+       private var head: nullable ListNode[E] = null
 
        # The last node of the list
-       var _tail: nullable ListNode[E]
+       private var tail: nullable ListNode[E] = null
 
        # Get the `i`th node. get `null` otherwise.
        private fun get_node(i: Int): nullable ListNode[E]
@@ -276,6 +269,7 @@ class ListIterator[E]
        super IndexedIterator[E]
        redef fun item do return _node.item
 
+       # Set item `e` at self `index`.
        fun item=(e: E) do _node.item = e
 
        redef fun is_ok do return not _node == null
@@ -287,21 +281,19 @@ class ListIterator[E]
        end
 
        # Build a new iterator for `list`.
-       private init(list: List[E])
+       init
        do
-               _list = list
-               _node = list._head
-               _index = 0
+               _node = _list._head
        end
 
        # The current list
-       var _list: List[E]
+       private var list: List[E]
 
        # The current node of the list
-       var _node: nullable ListNode[E]
+       private var node: nullable ListNode[E] = null
 
        # The index of the current node
-       redef readable var _index: Int
+       redef var index = 0
 
        # Remove the current item
        fun delete
@@ -325,9 +317,9 @@ private class ListReverseIterator[E]
                _index -= 1
        end
 
-       private init(list: List[E])
+       init
        do
-               _list = list
+               var list = _list
                _node = list._tail
                _index = list.length
        end
@@ -336,14 +328,10 @@ end
 # Linked nodes that constitute a linked list.
 private class ListNode[E]
        super Container[E]
-       init(i: E)
-       do 
-               item = i
-       end
 
        # The next node.
-       readable writable var _next: nullable ListNode[E]
+       var next: nullable ListNode[E] = null
 
        # The previous node.
-       readable writable var _prev: nullable ListNode[E]
+       var prev: nullable ListNode[E] = null
 end