# and reallocations when concatenating `String` objects.
module buffered_ropes
-intrude import standard::ropes
+intrude import standard::text::ropes
# Hidden buffer, used to simulate a `FlatBuffer` on a short string.
#
#
# Basically just returns `self` encapsulated in a `FlatString`.
private class LeafSubstrings
- super IndexedIterator[Text]
+ super IndexedIterator[FlatText]
- var str: String
+ var leaf: Leaf
+ var str: FlatString is noinit
var avail = true
- init(l: Leaf) do str = new FlatString.with_infos(l.buf.ns, l.length, 0, l.length - 1)
+ init do
+ str = new FlatString.with_infos(leaf.buf.ns, leaf.length, 0, leaf.length - 1)
+ end
redef fun is_ok do return avail
# Leaf of a `Rope`, used as a buffered area for speedy concatenation.
private class Leaf
- super RopeString
+ super String
+ super Rope
- private var buf: ManualBuffer
- private var bns: NativeString is noinit
+ var buf: ManualBuffer
+ var bns: NativeString is noinit
redef var length: Int is noinit
redef fun empty do return new Leaf(new ManualBuffer)
redef fun +(o) do
var s = o.to_s
- var mlen = length
var slen = s.length
if s isa FlatString then
var r = right
return new Concat(sl + self, s.right)
else if s isa Leaf then
if slen + mlen > maxlen then return new Concat(self, s)
- var mits = items
var mifrom = index_from
var sb = s.buf
var b = new ManualBuffer