lib/ordered_tree: add and used `add_all`
[nit.git] / lib / ordered_tree.nit
index 5c42f46..2b1e6ea 100644 (file)
@@ -14,7 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# management and display of ordered trees
+# Manipulation and presentation of ordered trees.
 module ordered_tree
 
 # Generic structure to manage and display an ordered tree
@@ -59,7 +59,7 @@ module ordered_tree
 # This class can be used as it to work with generic trees but can also be specialized to provide more specific
 # behavior or display. It is why the internal attributes are mutable.
 class OrderedTree[E: Object]
-       super Streamable
+       super Writable
        super Collection[E]
 
        # The roots of the tree (in sequence)
@@ -83,9 +83,15 @@ class OrderedTree[E: Object]
                end
        end
 
+       # Append all nodes `es` as children of `p`.
+       fun add_all(p: nullable E, es: Collection[E])
+       do
+               for e in es do add(p, e)
+       end
+
        # print the full tree on `o`
        # Write a ASCII-style tree and use the `display` method to label elements
-       redef fun write_to(stream: OStream)
+       redef fun write_to(stream: Writer)
        do
                for r in roots do
                        stream.write display(r)
@@ -94,7 +100,7 @@ class OrderedTree[E: Object]
                end
        end
 
-       private fun sub_write_to(o: OStream, e: E, prefix: String)
+       private fun sub_write_to(o: Writer, e: E, prefix: String)
        do
                if not sub.has_key(e) then return
                var subs = sub[e]
@@ -130,16 +136,11 @@ class OrderedTree[E: Object]
        # Order is preserved
        #
        #     var tree = new OrderedTree[Int]
-       #     tree.add(null, 1)
-       #     tree.add(1, 11)
-       #     tree.add(11, 111)
-       #     tree.add(11, 112)
-       #     tree.add(1, 12)
-       #     tree.add(12, 121)
-       #     tree.add(12, 122)
-       #     tree.add(null, 2)
-       #     tree.add(2, 21)
-       #     tree.add(2, 22)
+       #     tree.add_all(null, [1, 2])
+       #     tree.add_all(1, [11, 12])
+       #     tree.add_all(11, [111, 112])
+       #     tree.add_all(12, [121, 122])
+       #     tree.add_all(2, [21, 22])
        #     assert tree.to_a == [1, 11, 111, 112, 12, 121, 122, 2, 21, 22]
        redef fun to_a: Array[E] do
                var res = new Array[E]
@@ -165,20 +166,13 @@ class OrderedTree[E: Object]
        redef fun first do return roots.first
 
        #     var tree = new OrderedTree[Int]
-       #     tree.add(null, 1)
-       #     tree.add(1, 11)
-       #     tree.add(11, 111)
-       #     tree.add(11, 112)
-       #     tree.add(1, 12)
-       #     tree.add(12, 121)
-       #     tree.add(12, 122)
-       #     tree.add(null, 2)
-       #     tree.add(2, 21)
-       #     tree.add(2, 22)
+       #     tree.add_all(null, [1, 2])
+       #     tree.add_all(1, [11, 12])
+       #     tree.add_all(11, [111, 112])
+       #     tree.add_all(12, [121, 122])
+       #     tree.add_all(2, [21, 22])
        #     var order = [1, 11, 111, 112, 12, 121, 122, 2, 21, 22]
-       #     var res = new Array[Int]
-       #     for i in tree do res.add(i)
-       #     assert res == order
+       #     assert tree.iterator.to_a == order
        redef fun iterator do return new OrderedTreeIterator[E](self)
 end