X-Git-Url: http://nitlanguage.org diff --git a/lib/standard/string.nit b/lib/standard/string.nit index aa757b7..b02ff9b 100644 --- a/lib/standard/string.nit +++ b/lib/standard/string.nit @@ -249,6 +249,16 @@ abstract class Text # assert "ff".to_hex == 255 fun to_hex: Int do return a_to(16) + # If `self` contains only digits <= '7', return the corresponding integer. + # + # assert "714".to_oct == 460 + fun to_oct: Int do return a_to(8) + + # If `self` contains only '0' et '1', return the corresponding integer. + # + # assert "101101".to_bin == 45 + fun to_bin: Int do return a_to(2) + # If `self` contains only digits and letters, return the corresponding integer in a given base # # assert "120".a_to(3) == 15 @@ -888,8 +898,8 @@ abstract class Text # # REQUIRE: `n` must be large enough to contain `len` bytes # - # var ns = new NativeString(8) - # "Text is String".copy_to_native(ns, 8, 2, 0) + # var ns = new NativeString(8) + # "Text is String".copy_to_native(ns, 8, 2, 0) # assert ns.to_s_with_length(8) == "xt is St" # fun copy_to_native(dest: NativeString, n, src_offset, dest_offset: Int) do @@ -935,7 +945,7 @@ abstract class FlatText # copy locally the char* as Nit Strings are immutable. private fun fast_cstring: NativeString is abstract - redef var length: Int = 0 + redef var length = 0 redef fun output do @@ -1184,7 +1194,7 @@ class FlatString # Indes in _items of the last item of the string private var index_to: Int is noinit - redef var chars: SequenceRead[Char] = new FlatStringCharView(self) is lazy + redef var chars = new FlatStringCharView(self) is lazy redef fun [](index) do @@ -1309,8 +1319,7 @@ class FlatString index_to = to end - redef fun to_cstring: NativeString - do + redef fun to_cstring do if real_items != null then return real_items.as(not null) else @@ -1728,8 +1737,7 @@ class FlatBuffer capacity = c end - redef fun to_s: String - do + redef fun to_s do written = true if length == 0 then items = new NativeString(1) return new FlatString.with_infos(items, length, 0, length - 1) @@ -2027,6 +2035,26 @@ redef class Bool end end +redef class Byte + # C function to calculate the length of the `NativeString` to receive `self` + private fun byte_to_s_len: Int is extern "native_byte_length_str" + + # C function to convert an nit Int to a NativeString (char*) + private fun native_byte_to_s(nstr: NativeString, strlen: Int) is extern "native_byte_to_s" + + # Displayable byte in its hexadecimal form (0x..) + # + # assert 1.to_b.to_s == "0x01" + # assert (-123).to_b.to_s == "0x85" + redef fun to_s do + var nslen = byte_to_s_len + var ns = new NativeString(nslen + 1) + ns[nslen] = '\0' + native_byte_to_s(ns, nslen + 1) + return ns.to_s_with_length(nslen) + end +end + redef class Int # Wrapper of strerror C function