metrics/mendel: sort results in console display
[nit.git] / lib / standard / kernel.nit
index 09ce238..3f32a62 100644 (file)
@@ -17,10 +17,6 @@ module kernel
 
 import end # Mark this module is a top level one. (must be only one)
 
-`{
-#include <errno.h>
-`}
-
 ###############################################################################
 # System Classes                                                              #
 ###############################################################################
@@ -111,9 +107,7 @@ class Sys
        fun run do main
 
        # Number of the last error
-       fun errno: Int is extern `{
-               return errno;
-       `}
+       fun errno: Int is extern "sys_errno"
 end
 
 # Quit the program with a specific return code
@@ -226,6 +220,25 @@ interface Discrete
        end
 end
 
+# Something that can be cloned
+#
+# This interface introduces the `clone` method used to duplicate an instance
+# Its specific semantic is let to the subclasses.
+interface Cloneable
+       # Duplicate `self`
+       #
+       # The specific semantic of this method is let to the subclasses;
+       # Especially, if (and how) attributes are cloned (depth vs. shallow).
+       #
+       # As a rule of thumb, the principle of least astonishment should
+       # be used to guide the semantic.
+       #
+       # Note that as the returned clone depends on the semantic,
+       # the `==` method, if redefined, should ensure the equality
+       # between an object and its clone.
+       fun clone: SELF is abstract
+end
+
 # A numeric value supporting mathematical operations
 interface Numeric
        super Comparable
@@ -433,11 +446,17 @@ universal Int
        #     assert 5.lshift(1)    == 10
        fun lshift(i: Int): Int is intern
 
+       # alias of `lshift`
+       fun <<(i: Int): Int do return lshift(i)
+
        # `i` bits shift fo the right (aka >>)
        #
        #     assert 5.rshift(1)    == 2
        fun rshift(i: Int): Int is intern
 
+       # alias of `rshift`
+       fun >>(i: Int): Int do return rshift(i)
+
        redef fun to_i do return self
        redef fun to_f is intern
 
@@ -699,6 +718,22 @@ universal Char
        do
                return is_lower or is_upper
        end
+
+       # Is self a whitespace character?
+       #
+       # These correspond to the "Other" and "Separator" groups of the Unicode.
+       #
+       # In the ASCII encoding, this is those <= to space (0x20) plus delete (0x7F).
+       #
+       #     assert 'A'.is_whitespace  == false
+       #     assert ','.is_whitespace  == false
+       #     assert ' '.is_whitespace  == true
+       #     assert '\t'.is_whitespace == true
+       fun is_whitespace: Bool
+       do
+               var i = ascii
+               return i <= 0x20 or i == 0x7F
+       end
 end
 
 # Pointer classes are used to manipulate extern C structures.
@@ -707,5 +742,5 @@ extern class Pointer
        fun address_is_null: Bool is extern "address_is_null"
 
        # Free the memory pointed by this pointer
-       fun free `{ free(recv); `}
+       fun free is extern "free"
 end