From: Lucas Bajolet Date: Mon, 24 Mar 2014 16:00:34 +0000 (-0400) Subject: stdlib/strings: Added reversed service on Text and subclasses. X-Git-Tag: v0.6.5~7^2~3^2~5 X-Git-Url: http://nitlanguage.org stdlib/strings: Added reversed service on Text and subclasses. Signed-off-by: Lucas Bajolet --- diff --git a/lib/standard/string.nit b/lib/standard/string.nit index 75aba13..11dece3 100644 --- a/lib/standard/string.nit +++ b/lib/standard/string.nit @@ -177,6 +177,9 @@ abstract class Text return substring(from, length - from) end + # Returns a reversed version of self + fun reversed: SELFTYPE is abstract + # Does self have a substring `str` starting from position `pos`? # # assert "abcd".has_substring("bc",1) == true @@ -629,6 +632,19 @@ class FlatString return items[index + index_from] end + redef fun reversed + do + var native = calloc_string(self.length + 1) + var reviter = chars.reverse_iterator + var pos = 0 + while reviter.is_ok do + native[pos] = reviter.item + pos += 1 + reviter.next + end + return native.to_s_with_length(self.length) + end + redef fun substring(from, count) do assert count >= 0 @@ -1113,6 +1129,17 @@ class FlatBuffer end end + redef fun reversed + do + var new_buf = new FlatBuffer.with_capacity(self.length) + var reviter = self.chars.reverse_iterator + while reviter.is_ok do + new_buf.add(reviter.item) + reviter.next + end + return new_buf + end + redef fun +(other) do var new_buf = new FlatBuffer.with_capacity(self.length + other.length)