X-Git-Url: http://nitlanguage.org diff --git a/lib/core/text/flat.nit b/lib/core/text/flat.nit index 67ffacf..9e70321 100644 --- a/lib/core/text/flat.nit +++ b/lib/core/text/flat.nit @@ -369,6 +369,10 @@ redef class FlatText end return res end + + redef fun copy_to_native(dst, n, src_off, dst_off) do + _items.copy_to(dst, n, first_byte + src_off, dst_off) + end end # Immutable strings of characters. @@ -666,15 +670,15 @@ private class ASCIIFlatString end redef fun substring(from, count) do + var ln = _length + if count <= 0 then return "" + if (count + from) > ln then count = ln - from if count <= 0 then return "" - if from < 0 then count += from - if count < 0 then return "" + if count <= 0 then return "" from = 0 end - var ln = _length - if (count + from) > ln then count = ln - from return new ASCIIFlatString.full_data(_items, count, from + _first_byte, count) end @@ -924,7 +928,10 @@ class FlatBuffer is_dirty = true _bytelen = 0 _length = 0 - if written then reset + if written then + _capacity = 16 + reset + end end redef fun empty do return new Buffer @@ -991,15 +998,10 @@ class FlatBuffer init from(s: Text) do _items = new NativeString(s.bytelen) - if s isa FlatText then - _items = s._items - else - for i in substrings do i.as(FlatString)._items.copy_to(_items, i._bytelen, 0, 0) - end + for i in s.substrings do i._items.copy_to(_items, i._bytelen, first_byte, 0) _bytelen = s.bytelen _length = s.length _capacity = _bytelen - written = true end # Create a new empty string with a given capacity.