lib/standard/ropes: Adapted chars method and related class to Ropes.
authorLucas Bajolet <r4pass@hotmail.com>
Thu, 5 Jun 2014 14:44:28 +0000 (10:44 -0400)
committerLucas Bajolet <r4pass@hotmail.com>
Thu, 5 Jun 2014 18:17:07 +0000 (14:17 -0400)
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>

lib/standard/ropes.nit

index b1aad2e..37ac23e 100644 (file)
@@ -224,6 +224,8 @@ class RopeString
 
        redef fun empty do return once new RopeString.from("")
 
+       redef var chars: SequenceRead[Char] = new RopeStringChars(self)
+
        redef fun reversed
        do
                var ret = empty.as(RopeString)
@@ -398,6 +400,27 @@ class RopeString
        end
 end
 
+private class RopeStringChars
+       super SequenceRead[Char]
+
+       var tgt: Rope
+
+       redef fun [](pos)
+       do
+               assert pos < tgt.length
+               var path = tgt.node_at(pos)
+               return path.leaf.str.chars[path.offset]
+       end
+
+       redef fun iterator do return iterator_from(0)
+
+       redef fun iterator_from(pos) do return new RopeCharIterator(tgt, pos)
+
+       redef fun reverse_iterator do return reverse_iterator_from(tgt.length-1)
+
+       redef fun reverse_iterator_from(pos) do return new ReverseRopeCharIterator(tgt, pos)
+end
+
 # Used to iterate on a Rope
 private class IteratorElement