From e7dc46722577efba4eefdef90f9c377a73546289 Mon Sep 17 00:00:00 2001 From: Lucas Bajolet Date: Mon, 21 Jul 2014 10:45:25 -0400 Subject: [PATCH] lib/string_exp/utf8: Adapted reverse service on UTF-8 strings. Signed-off-by: Lucas Bajolet --- lib/string_experimentations/utf8.nit | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/lib/string_experimentations/utf8.nit b/lib/string_experimentations/utf8.nit index a1b5d44..eb0737d 100644 --- a/lib/string_experimentations/utf8.nit +++ b/lib/string_experimentations/utf8.nit @@ -159,6 +159,29 @@ redef class FlatString self.bytelen = bytelen end + redef fun reversed + do + var native = calloc_string(self.bytelen + 1) + var length = self.length + var index = self.index + var pos = 0 + var i = 0 + var ipos = bytelen + var new_index = new StringIndex(length) + var pos_index = length + while i < length do + var uchar = index[i] + var uchar_len = uchar.len + ipos -= uchar_len + new_index[pos_index] = new UnicodeChar(ipos, native) + pos_index -= 1 + items.copy_to(native, uchar_len, pos, ipos) + pos += uchar_len + i += 1 + end + return new FlatString.with_infos_index(native, length, 0, length-1, new_index, bytelen) + end + redef fun *(i) do assert i >= 0 -- 1.7.9.5