X-Git-Url: http://nitlanguage.org diff --git a/lib/standard/kernel.nit b/lib/standard/kernel.nit index 64de7c3..30c592d 100644 --- a/lib/standard/kernel.nit +++ b/lib/standard/kernel.nit @@ -119,7 +119,7 @@ end # Discrete total orders. interface Discrete -special Comparable + super Comparable redef type OTHER: Discrete @@ -200,7 +200,7 @@ end # Native integer numbers. # Correspond to C int. universal Int -special Discrete + super Discrete redef type OTHER: Int redef fun object_id is intern @@ -312,13 +312,35 @@ special Discrete return (self + ('a'.ascii - 10)).ascii end end + + # Executre 'each' for each integer in [self..last] + fun enumerate_to(last: Int) + !each(i: Int) + do + var cur = self + while cur <= last do + each(cur) + cur += 1 + end + end + + # Executre 'each' for each integer in [self..after[ + fun enumerate_before(after: Int) + !each(i: Int) + do + var cur = self + while cur < after do + each(cur) + cur += 1 + end + end end # Native characters. # Characters are denoted with simple quote. # eg. 'a' or '\n'. universal Char -special Discrete + super Discrete redef type OTHER: Char redef fun object_id is intern @@ -350,7 +372,7 @@ special Discrete if self == '-' then return -1 - else if self >= '0' and self <= '9' then + else if is_digit then return self.ascii - '0'.ascii else return self.to_lower.ascii - ('a'.ascii + 10) @@ -366,7 +388,7 @@ special Discrete # Char to lower case fun to_lower : Char do - if self >= 'A' and self <= 'Z' then + if is_upper then return (ascii + ('a'.distance('A'))).ascii else return self @@ -376,12 +398,32 @@ special Discrete # Char to upper case fun to_upper : Char do - if self >= 'a' and self <= 'z' then + if is_lower then return (ascii - ('a'.distance('A'))).ascii else return self end end + + fun is_digit : Bool + do + return self >= '0' and self <= '9' + end + + fun is_lower : Bool + do + return self >= 'a' and self <= 'z' + end + + fun is_upper : Bool + do + return self >= 'A' and self <= 'Z' + end + + fun is_letter : Bool + do + return is_lower or is_upper + end end # Pointer classes are used to manipulate extern C structures.