lib/string_exp/utf8: Adapted reverse service on UTF-8 strings.
authorLucas Bajolet <r4pass@hotmail.com>
Mon, 21 Jul 2014 14:45:25 +0000 (10:45 -0400)
committerLucas Bajolet <r4pass@hotmail.com>
Tue, 29 Jul 2014 16:00:11 +0000 (12:00 -0400)
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>

lib/string_experimentations/utf8.nit

index a1b5d44..eb0737d 100644 (file)
@@ -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