From 3cd533ca7fb1bc05f82f1e0b580079f6b4d13c91 Mon Sep 17 00:00:00 2001 From: Lucas Bajolet Date: Thu, 5 Jun 2014 10:44:28 -0400 Subject: [PATCH] lib/standard/ropes: Adapted chars method and related class to Ropes. Signed-off-by: Lucas Bajolet --- lib/standard/ropes.nit | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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 -- 1.7.9.5