From: Lucas Bajolet Date: Mon, 24 Mar 2014 15:58:55 +0000 (-0400) Subject: stdlib/strings: Moved String as abstract, FlatString now the name for array-based... X-Git-Tag: v0.6.5~7^2~3^2~10 X-Git-Url: http://nitlanguage.org stdlib/strings: Moved String as abstract, FlatString now the name for array-based Strings. Signed-off-by: Lucas Bajolet --- diff --git a/lib/standard/ropes.nit b/lib/standard/ropes.nit index 708be9a..ad093ae 100644 --- a/lib/standard/ropes.nit +++ b/lib/standard/ropes.nit @@ -71,7 +71,7 @@ abstract class Rope end # Stores a flat version of self in cache - private fun flatten: String + private fun flatten: FlatString do var native_final_str = calloc_string(length + 1) @@ -82,7 +82,7 @@ abstract class Rope var iter = new DFSRopeLeafIterator(self) while iter.is_ok do - iter.item.value.items.copy_to(native_final_str, iter.item.value.length, 0, offset) + iter.item.value.as(FlatString).items.copy_to(native_final_str, iter.item.value.length, 0, offset) offset += iter.item.value.length iter.next end diff --git a/lib/standard/string.nit b/lib/standard/string.nit index 3b8f02e..d416000 100644 --- a/lib/standard/string.nit +++ b/lib/standard/string.nit @@ -583,11 +583,21 @@ abstract class BufferCharView end +abstract class String + super Text + + redef type SELFTYPE: String + + redef fun to_s do return self + +end + # Immutable strings of characters. -class String +class FlatString super FlatText + super String - redef type SELFTYPE: String + redef type SELFTYPE: FlatString redef type SELFVIEW: FlatStringCharView # Index in _items of the start of the string @@ -622,16 +632,16 @@ class String var realFrom = index_from + from - if (realFrom + count) > index_to then return new String.with_infos(items, index_to - realFrom + 1, realFrom, index_to) + if (realFrom + count) > index_to then return new FlatString.with_infos(items, index_to - realFrom + 1, realFrom, index_to) - if count == 0 then return "" + if count == 0 then return empty var to = realFrom + count - 1 - return new String.with_infos(items, to - realFrom + 1, realFrom, to) + return new FlatString.with_infos(items, to - realFrom + 1, realFrom, to) end - redef fun empty do return "".as(String) + redef fun empty do return "".as(FlatString) redef fun to_upper do @@ -709,7 +719,7 @@ class String redef fun ==(other) do - if not other isa String then return super + if not other isa FlatString then return super if self.object_id == other.object_id then return true @@ -739,7 +749,7 @@ class String # assert ("aa" < "b") == true redef fun <(other) do - if not other isa String then return super + if not other isa FlatString then return super if self.object_id == other.object_id then return false @@ -786,7 +796,7 @@ class String var target_string = calloc_string(my_length + its_length + 1) self.items.copy_to(target_string, my_length, index_from, 0) - if s isa String then + if s isa FlatString then s.items.copy_to(target_string, its_length, s.index_from, my_length) else if s isa FlatBuffer then s.items.copy_to(target_string, its_length, 0, my_length) @@ -830,8 +840,6 @@ class String return target_string.to_s_with_length(final_length) end - redef fun to_s do return self - redef fun hash do # djb2 hash algorythm @@ -855,13 +863,13 @@ end private class FlatStringReverseIterator super IndexedIterator[Char] - var target: String + var target: FlatString var target_items: NativeString var curr_pos: Int - init with_pos(tgt: String, pos: Int) + init with_pos(tgt: FlatString, pos: Int) do target = tgt target_items = tgt.items @@ -881,13 +889,13 @@ end private class FlatStringIterator super IndexedIterator[Char] - var target: String + var target: FlatString var target_items: NativeString var curr_pos: Int - init with_pos(tgt: String, pos: Int) + init with_pos(tgt: FlatString, pos: Int) do target = tgt target_items = tgt.items @@ -907,7 +915,7 @@ end private class FlatStringCharView super StringCharView - redef type SELFTYPE: String + redef type SELFTYPE: FlatString redef fun [](index) do @@ -1036,7 +1044,7 @@ class FlatBuffer do var sl = s.length if capacity < length + sl then enlarge(length + sl) - if s isa String then + if s isa FlatString then s.items.copy_to(items, sl, s.index_from, length) else if s isa FlatBuffer then s.items.copy_to(items, sl, 0, length) @@ -1505,18 +1513,18 @@ class NativeString return to_s_with_length(cstring_length) end - fun to_s_with_length(length: Int): String + fun to_s_with_length(length: Int): FlatString do assert length >= 0 - return new String.with_infos(self, length, 0, length - 1) + return new FlatString.with_infos(self, length, 0, length - 1) end - fun to_s_with_copy: String + fun to_s_with_copy: FlatString do var length = cstring_length var new_self = calloc_string(length + 1) copy_to(new_self, length, 0, 0) - return new String.with_infos(new_self, length, 0, length - 1) + return new FlatString.with_infos(new_self, length, 0, length - 1) end end diff --git a/tests/base_test_obj_id.nit b/tests/base_test_obj_id.nit index caa1c4b..6c7125d 100644 --- a/tests/base_test_obj_id.nit +++ b/tests/base_test_obj_id.nit @@ -27,4 +27,4 @@ assert 'd'.object_id.to_s.is_numeric assert 1.0.object_id.to_s.is_numeric # Check NativeString.object_id -assert "Test".items.object_id.to_s.is_numeric +assert "Test".as(FlatString).items.object_id.to_s.is_numeric diff --git a/tests/sav/base_class_name.res b/tests/sav/base_class_name.res index 34cdf5b..35e4ebe 100644 --- a/tests/sav/base_class_name.res +++ b/tests/sav/base_class_name.res @@ -1,4 +1,4 @@ -String +FlatString Int Test Test diff --git a/tests/string_ffi_ref_test.nit b/tests/string_ffi_ref_test.nit index 64b6bc4..040226a 100644 --- a/tests/string_ffi_ref_test.nit +++ b/tests/string_ffi_ref_test.nit @@ -31,16 +31,16 @@ class StringTest referenced_str = null end - fun get_c_string import String.items, NativeString.to_s, NativeString.to_s_with_copy, StringTest.ref_test, StringTest.copy_test `{ + fun get_c_string import FlatString.items, NativeString.to_s, NativeString.to_s_with_copy, StringTest.ref_test, StringTest.copy_test `{ char* string = "This is a test string"; - String ref_string = NativeString_to_s(string); + FlatString ref_string = NativeString_to_s(string); StringTest_ref_test(recv, ref_string); - String copy_string = NativeString_to_s_with_copy(string); + FlatString copy_string = NativeString_to_s_with_copy(string); StringTest_copy_test(recv, copy_string); - int same_refs = String_items(copy_string) == String_items(ref_string); + int same_refs = FlatString_items(copy_string) == FlatString_items(ref_string); printf("Do the strings have the same NativeString reference ? ");