+ redef fun insert(s, pos) do
+ assert pos >= 0 and pos <= length
+ if pos == length then
+ append s
+ return
+ end
+ var slen = s.byte_length
+ enlarge(byte_length + slen)
+ var it = _items
+ var shpos = it.char_to_byte_index(pos)
+ rshift_bytes(shpos, slen)
+ s.copy_to_native(it, slen, 0, shpos)
+ length += s.length
+ byte_length += slen
+ end
+
+ redef fun insert_char(c, pos) do
+ assert pos >= 0 and pos <= length
+ if pos == length then
+ add c
+ return
+ end
+ var clen = c.u8char_len
+ enlarge(byte_length + clen)
+ var it = _items
+ var shpos = it.char_to_byte_index(pos)
+ rshift_bytes(shpos, clen)
+ it.set_char_at(shpos, c)
+ length += 1
+ byte_length += clen
+ end
+