Merge: Performance update on Buffer
[nit.git] / lib / standard / text / abstract_text.nit
index cf0d1dc..1faaad3 100644 (file)
@@ -240,58 +240,6 @@ abstract class Text
                return b.to_s
        end
 
-       # Is `self` a well-formed Integer (i.e. parsable via `to_i`)
-       #
-       #     assert "123".is_int
-       #     assert "0b1011".is_int
-       #     assert not "0x_".is_int
-       #     assert not "0xGE".is_int
-       fun is_int: Bool do
-               var s = remove_all('_')
-               var pos = 0
-               while s[pos] == '-' do
-                       pos += 1
-               end
-               s = s.substring_from(pos)
-               var rets = s.strip_numhead
-               if rets == "" then return false
-               var hd = get_numhead
-               if hd == "0x" or hd == "0X" then return rets.is_hex
-               if hd == "0b" or hd == "0B" then return rets.is_bin
-               if hd == "0o" or hd == "0O" then return rets.is_oct
-               return hd.is_dec
-       end
-
-       # Removes the numeric head of `self` if present
-       #
-       #     intrude import standard::text::abstract_text
-       #     assert "0xFFEF".strip_numhead  == "FFEF"
-       #     assert "0o7364".strip_numhead  == "7364"
-       #     assert "0b01001".strip_numhead == "01001"
-       #     assert "98".strip_numhead      == "98"
-       private fun strip_numhead: Text do
-               if get_numhead != "" then return substring_from(2)
-               return self
-       end
-
-       # Gets the numeric head of `self` if present
-       # Returns "" otherwise
-       #
-       #     intrude import standard::text::abstract_text
-       #     assert "0xFEFF".get_numhead  == "0x"
-       #     assert "0b01001".get_numhead == "0b"
-       #     assert "0o872".get_numhead   == "0o"
-       #     assert "98".get_numhead      == ""
-       private fun get_numhead: Text do
-               if self.length < 2 then return ""
-               var c = self[0]
-               if c != '0' then return ""
-               c = self[1]
-               if c == 'x' or c == 'b' or c == 'o' or
-                  c == 'X' or c == 'B' or c == 'O' then return substring(0, 2)
-               return ""
-       end
-
        # Returns `self` as the corresponding integer
        #
        #     assert "123".to_i        == 123
@@ -301,34 +249,7 @@ abstract class Text
        #     assert "--12".to_i       == 12
        #
        # REQUIRE: `self`.`is_int`
-       fun to_i: Int
-       do
-               assert self.is_int
-               var s = remove_all('_')
-               var val = 0
-               var neg = false
-               var pos = 0
-               while s[pos] == '-' do
-                       neg = not neg
-                       pos += 1
-               end
-               s = s.substring_from(pos)
-               if s.length >= 2 then
-                       var s1 = s[1]
-                       if s1 == 'x' or s1 == 'X' then
-                               val = s.substring_from(2).to_hex
-                       else if s1 == 'o' or s1 == 'O' then
-                               val = s.substring_from(2).to_oct
-                       else if s1 == 'b' or s1 == 'B' then
-                               val = s.substring_from(2).to_bin
-                       else if s1.is_numeric then
-                               val = s.to_dec
-                       end
-               else
-                       val = s.to_dec
-               end
-               return if neg then -val else val
-       end
+       fun to_i: Int is abstract
 
        # If `self` contains a float, return the corresponding float
        #
@@ -977,7 +898,7 @@ abstract class Text
 
                        for i in [0..length[ do
                                var char = chars[i]
-                               h = h.lshift(5) + h + char.ascii
+                               h = (h << 5) + h + char.ascii
                        end
 
                        hash_cache = h
@@ -1432,10 +1353,6 @@ abstract class Buffer
        # In Buffers, the internal sequence of character is mutable
        # Thus, `chars` can be used to modify the buffer.
        redef fun chars: Sequence[Char] is abstract
-
-       # In Buffers, the internal sequence of bytes is mutable
-       # Thus, `bytes` can be used to modify the buffer.
-       redef fun bytes: Sequence[Byte] is abstract
 end
 
 # View for chars on Buffer objects, extends Sequence
@@ -1452,7 +1369,6 @@ end
 # for mutation operations
 private abstract class BufferByteView
        super StringByteView
-       super Sequence[Byte]
 
        redef type SELFTYPE: Buffer
 end