X-Git-Url: http://nitlanguage.org diff --git a/lib/standard/collection/abstract_collection.nit b/lib/standard/collection/abstract_collection.nit index d38e001..2f7e454 100644 --- a/lib/standard/collection/abstract_collection.nit +++ b/lib/standard/collection/abstract_collection.nit @@ -66,6 +66,14 @@ interface Collection[E] # assert [1..1[.is_empty == true fun is_empty: Bool do return length == 0 + # Alias for `not is_empty`. + # + # Some people prefer to have conditions grammatically easier to read. + # + # assert [1,2,3].not_empty == true + # assert [1..1[.not_empty == false + fun not_empty: Bool do return not self.is_empty + # Number of items in the collection. # # assert [10,20,30].length == 3 @@ -171,8 +179,9 @@ interface Collection[E] end end -# Instances of the Iterator class generates a series of elements, one at a time. -# They are mainly used with collections. +# Iterators generate a series of elements, one at a time. +# +# They are mainly used with collections and obtained from `Collection::iterator`. interface Iterator[E] # The current item. # Require `is_ok`. @@ -203,7 +212,7 @@ end # # Used to pass arguments by reference. # -# Also used when one want to give asingle element when a full +# Also used when one want to give a single element when a full # collection is expected class Container[E] super Collection[E] @@ -497,6 +506,25 @@ interface MapRead[K, V] end return true end + + # A hashcode based on the hashcode of the keys and the values. + # + # ~~~ + # var a = new HashMap[String, Int] + # var b = new ArrayMap[Object, Numeric] + # a["one"] = 1 + # b["one"] = 1 + # assert a.hash == b.hash + # ~~~ + redef fun hash + do + var res = length + for k, v in self do + if k != null then res += k.hash * 7 + if v != null then res += v.hash * 11 + end + return res + end end # Maps are associative collections: `key` -> `item`.