- redef fun to_s_unsafe(len) do
- if len == null then len = cstring_length
- return new FlatString.with_infos(self, len, 0)
- end
+ redef fun to_s_unsafe(byte_length, char_length, copy, clean)
+ do
+ byte_length = byte_length or else cstring_length
+ clean = clean or else true
+ copy = copy or else true
+
+ # Clean?
+ var str = null
+ if clean then
+ str = clean_utf8(byte_length)
+ char_length = str.length
+ else
+ char_length = char_length or else utf8_length(0, byte_length)
+ end
+
+ # Copy? (if not already copied by `clean_utf8`)
+ if copy and (str == null or str.items == self) then
+ var new_cstr = new CString(byte_length + 1)
+ copy_to(new_cstr, byte_length, 0, 0)
+ new_cstr[byte_length] = 0u8
+ str = new FlatString.full(new_cstr, byte_length, 0, char_length)
+ end