X-Git-Url: http://nitlanguage.org diff --git a/lib/ordered_tree.nit b/lib/ordered_tree.nit index 5c42f46..2b1e6ea 100644 --- a/lib/ordered_tree.nit +++ b/lib/ordered_tree.nit @@ -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