metamodel: rename 'universal' to 'enum'
[nit.git] / lib / standard / string.nit
index 1c7e953..d61b260 100644 (file)
 package string
 
 intrude import collection # FIXME should be collection::array
+import hash
 
 ###############################################################################
 # String                                                                      #
 ###############################################################################
 
 abstract class AbstractString
-special AbstractArrayRead[Char]
+       super AbstractArrayRead[Char]
        readable private var _items: NativeString
 
        redef fun [](index) do return _items[index]
@@ -159,8 +160,8 @@ end
 
 
 class String
-special Comparable
-special AbstractString
+       super Comparable
+       super AbstractString
        redef type OTHER: String
 
        # Create a new string from a given char *.
@@ -246,14 +247,28 @@ special AbstractString
        end
 
        redef fun to_s do return self
+
+       redef fun hash
+       do
+               # djb2 hash algorythm
+               var h = 5381
+               var i = _length - 1
+               var it = _items
+               while i >= 0 do
+                       h = (h * 32) + h + it[i].ascii
+                       i -= 1
+               end
+               return h
+
+       end
 end
 
 # Strings are arrays of characters.
 class Buffer
-special AbstractString
-special Comparable
-special StringCapable
-special AbstractArray[Char]
+       super AbstractString
+       super Comparable
+       super StringCapable
+       super AbstractArray[Char]
 
        redef type OTHER: String
 
@@ -399,7 +414,7 @@ redef class Object
                return "<{object_id.to_hex}"
        end
 
-       protected fun args: IndexedCollection[String]
+       protected fun args: Sequence[String]
        do
                return sys.args
        end
@@ -587,9 +602,9 @@ class StringCapable
 end
 
 redef class Sys
-       var _args_cache: nullable IndexedCollection[String]
+       var _args_cache: nullable Sequence[String]
 
-       redef fun args: IndexedCollection[String]
+       redef fun args: Sequence[String]
        do
                if _args_cache == null then init_args
                return _args_cache.as(not null)