o
to self
assert "hello" + "world" == "helloworld"
assert "" + "hello" + "" == "hello"
redef fun +(o) do
var s = o.to_s
var slen = s.byte_length
var mlen = _byte_length
var nlen = mlen + slen
var mits = _items
var mifrom = _first_byte
if s isa FlatText then
var sits = s._items
var sifrom = s.first_byte
var ns = new CString(nlen + 1)
mits.copy_to(ns, mlen, mifrom, 0)
sits.copy_to(ns, slen, sifrom, mlen)
return new FlatString.full(ns, nlen, 0, _length + o.length)
else
abort
end
end
lib/core/text/flat.nit:600,2--617,4
redef fun +(o) do
var s = o.to_s
var slen = s.byte_length
var mlen = _byte_length
if slen == 0 then return self
if mlen == 0 then return s
var nlen = slen + mlen
if s isa FlatString then
if nlen > maxlen then return new Concat(self, s)
var mits = _items
var sifrom = s._first_byte
var mifrom = _first_byte
var sits = s._items
var ns = new CString(nlen + 1)
mits.copy_to(ns, mlen, mifrom, 0)
sits.copy_to(ns, slen, sifrom, mlen)
return new FlatString.full(ns, nlen, 0, length + s.length)
else if s isa Concat then
var sl = s._left
var sllen = sl.byte_length
if sllen + mlen > maxlen then return new Concat(self, s)
return new Concat(self + sl, s._right)
else
abort
end
end
lib/core/text/ropes.nit:292,2--317,4