# Set the`item' at `key'.
fun []=(key: K, item: E) is abstract
- # Remove the item at `key'
- fun remove_at(key: K) is abstract
+ # Depreciated alias for `keys.remove`
+ fun remove_at(key: K) do keys.remove(key)
# Add each (key,value) of `map' into `self'.
# If a same key exists in `map' and `self', then the value in self is discarded.
# Remove all items
fun clear is abstract
- # Remove an occucence of `item'
- fun remove(item: E) is abstract
+ # Depreciated alias for `values.remove`
+ fun remove(item: E) do values.remove(item)
- # Remove all occurences of `item'
- fun remove_all(item: E) do while has(item) do remove(item)
+ # Depreciated alias for `values.remove_all`
+ fun remove_all(item: E) do values.remove_all(item)
+
+ redef fun values: RemovableCollection[E] is abstract
+
+ redef fun keys: RemovableCollection[E] is abstract
end
# Iterators for Map.
redef fun is_empty do return _items.is_empty
- redef fun remove(item)
- do
- var i = _items.length - 1
- while i >= 0 do
- if _items[i].second == item then
- remove_at_index(i)
- return
- end
- i -= 1
- end
- end
-
- redef fun remove_all(item: E)
- do
- var i = _items.length - 1
- while i >= 0 do
- if _items[i].second == item then
- remove_at_index(i)
- end
- i -= 1
- end
- end
-
- redef fun remove_at(key)
- do
- var i = index(key)
- if i >= 0 then remove_at_index(i)
- end
-
redef fun clear do _items.clear
# Assume the capacity to be at least `cap'.
end
class ArrayMapKeys[K: Object, E]
- super Collection[K]
+ super RemovableCollection[K]
# The original map
var map: ArrayMap[K, E]
redef fun count(k) do if self.has(k) then return 1 else return 0
redef fun is_empty do return self.map.is_empty
redef fun length do return self.map.length
redef fun iterator do return new MapKeysIterator[K, E](self.map.iterator)
+ redef fun clear do self.map.clear
+ redef fun remove(key)
+ do
+ var i = self.map.index(key)
+ if i >= 0 then self.map.remove_at_index(i)
+ end
+ redef fun remove_all(key) do self.remove(key)
end
class ArrayMapValues[K: Object, E]
- super Collection[K]
+ super RemovableCollection[K]
# The original map
var map: ArrayMap[K, E]
redef fun first do return self.map._items.first.first
return nb
end
+ redef fun clear do self.map.clear
+
+ redef fun remove(item)
+ do
+ var map = self.map
+ var i = map._items.length - 1
+ while i >= 0 do
+ if map._items[i].second == item then
+ map.remove_at_index(i)
+ return
+ end
+ i -= 1
+ end
+ end
+
+ redef fun remove_all(item)
+ do
+ var map = self.map
+ var i = map._items.length - 1
+ while i >= 0 do
+ if map._items[i].second == item then
+ map.remove_at_index(i)
+ end
+ i -= 1
+ end
+ end
end
end
end
- redef fun remove(item)
- do
- var c = _first_item
- while c != null do
- if c._value == item then
- remove_node(c._key)
- return
- end
- c = c._next_item
- end
- end
-
- redef fun remove_at(key) do remove_node(key)
-
redef fun clear do raz
init
end
class HashMapKeys[K: Object, V]
- super NaiveCollection[K]
+ super RemovableCollection[K]
# The original map
var map: HashMap[K, V]
redef fun length do return self.map.length
redef fun iterator do return new MapKeysIterator[K, V](self.map.iterator)
+
+ redef fun clear do self.map.clear
+
+ redef fun remove(key) do self.map.remove_node(key)
+ redef fun remove_all(key) do self.map.remove_node(key)
end
class HashMapValues[K: Object, V]
- super NaiveCollection[V]
+ super RemovableCollection[V]
# The original map
var map: HashMap[K, V]
redef fun length do return self.map.length
redef fun iterator do return new MapValuesIterator[K, V](self.map.iterator)
+
+ redef fun clear do self.map.clear
+
+ redef fun remove(item)
+ do
+ var map = self.map
+ var c = map._first_item
+ while c != null do
+ if c._value == item then
+ map.remove_node(c._key)
+ return
+ end
+ c = c._next_item
+ end
+ end
+
+ redef fun remove_all(item)
+ do
+ var map = self.map
+ var c = map._first_item
+ while c != null do
+ if c._value == item then
+ map.remove_node(c._key)
+ end
+ c = c._next_item
+ end
+ end
end
class HashMapNode[K: Object, V]