benchmarks: Reunited common functions for benches in a new shell file.
[nit.git] / lib / standard / kernel.nit
index 9dbdc25..fb84d2e 100644 (file)
@@ -17,6 +17,10 @@ module kernel
 
 import end # Mark this module is a top level one. (must be only one)
 
+`{
+#include <errno.h>
+`}
+
 ###############################################################################
 # System Classes                                                              #
 ###############################################################################
@@ -84,6 +88,11 @@ end
 class Sys
        # Instructions outside classes implicitly redefine this method.
        fun main do end
+
+       # Number of the last error
+       fun errno: Int is extern `{
+               return errno;
+       `}
 end
 
 ###############################################################################
@@ -224,6 +233,20 @@ interface Numeric
        #     assert 5.to_f         == 5.0
        #     assert 5.to_f         != 5 # Float and Int are not equals
        fun to_f: Float is abstract
+
+       # Is this the value of zero in its domain?
+       fun is_zero: Bool do return self == zero
+
+       # The value of zero in the domain of `self`
+       fun zero: OTHER is abstract
+
+       # The value of `val` in the domain of `self`
+       #
+       #     assert 1.0.value_of(2) == 2.0
+       #     assert 1.0.value_of(2.0) == 2.0
+       #     assert 1.value_of(2) == 2
+       #     assert 1.value_of(2.0) == 2
+       fun value_of(val: Numeric): OTHER is abstract
 end
 
 ###############################################################################
@@ -240,7 +263,10 @@ universal Bool
        redef fun ==(b) is intern
        redef fun !=(b) is intern
        redef fun output is intern
-       redef fun hash
+       redef fun hash do return to_i
+
+       # 1 if true and 0 if false
+       fun to_i: Int
        do
                if self then
                        return 1
@@ -273,6 +299,9 @@ universal Float
 
        redef fun to_i is intern
        redef fun to_f do return self
+
+       redef fun zero do return 0.0
+       redef fun value_of(val) do return val.to_f
 end
 
 # Native integer numbers.
@@ -304,6 +333,9 @@ universal Int
        redef fun /(i) is intern
        fun %(i: Int): Int is intern
 
+       redef fun zero do return 0
+       redef fun value_of(val) do return val.to_i
+
        # `i` bits shift fo the left (aka <<)
        #
        #     assert 5.lshift(1)    == 10
@@ -578,7 +610,10 @@ universal Char
 end
 
 # Pointer classes are used to manipulate extern C structures.
-extern Pointer
+extern class Pointer
        # Is the address behind this Object at NULL?
-       fun address_is_null: Bool `{ return recv == NULL; `}
+       fun address_is_null: Bool is extern "address_is_null"
+
+       # Free the memory pointed by this pointer
+       fun free `{ free(recv); `}
 end