stdlib/strings: Added reversed service on Text and subclasses.
authorLucas Bajolet <r4pass@hotmail.com>
Mon, 24 Mar 2014 16:00:34 +0000 (12:00 -0400)
committerLucas Bajolet <r4pass@hotmail.com>
Tue, 25 Mar 2014 19:39:51 +0000 (15:39 -0400)
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>

lib/standard/string.nit

index 75aba13..11dece3 100644 (file)
@@ -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)