lib/core: Perfize < for FlatString which caused a lot of unneccessary boxings
authorLucas Bajolet <r4pass@hotmail.com>
Tue, 17 Nov 2015 21:05:14 +0000 (16:05 -0500)
committerLucas Bajolet <r4pass@hotmail.com>
Thu, 19 Nov 2015 18:56:53 +0000 (13:56 -0500)
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>

lib/core/text/flat.nit

index fbe142f..cd8523c 100644 (file)
@@ -443,25 +443,28 @@ class FlatString
 
                if self.object_id == other.object_id then return false
 
-               var my_length = self._bytelen
-               var its_length = other._bytelen
+               var myits = _items
+               var itsits = other._items
 
-               var max = if my_length < its_length then my_length else its_length
+               var mbt = _bytelen
+               var obt = other.bytelen
 
-               var myits = self.bytes
-               var itsits = other.bytes
+               var minln = if mbt < obt then mbt else obt
+               var mst = _first_byte
+               var ost = other.first_byte
 
-               for i in [0 .. max[ do
-                       var my_curr_char = myits[i]
-                       var its_curr_char = itsits[i]
+               for i in [0 .. minln[ do
+                       var my_curr_char = myits[mst]
+                       var its_curr_char = itsits[ost]
 
-                       if my_curr_char != its_curr_char then
-                               if my_curr_char < its_curr_char then return true
-                               return false
-                       end
+                       if my_curr_char > its_curr_char then return false
+                       if my_curr_char < its_curr_char then return true
+
+                       mst += 1
+                       ost += 1
                end
 
-               return my_length < its_length
+               return mbt < obt
        end
 
        redef fun +(o) do