From: Lucas Bajolet Date: Thu, 5 Jun 2014 14:44:28 +0000 (-0400) Subject: lib/standard/ropes: Adapted chars method and related class to Ropes. X-Git-Tag: v0.6.6~43^2~9 X-Git-Url: http://nitlanguage.org lib/standard/ropes: Adapted chars method and related class to Ropes. Signed-off-by: Lucas Bajolet --- diff --git a/lib/standard/ropes.nit b/lib/standard/ropes.nit index b1aad2e..37ac23e 100644 --- a/lib/standard/ropes.nit +++ b/lib/standard/ropes.nit @@ -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