1  package frost.collections
 2  
 3  ====================================================================================================
 4  As `HashMap`, but additionally has a default value which is returned for keys which are not present
 5  in the map.
 6  ====================================================================================================
 7  class DefaultHashMap<K:HashKey<K>, V> : Map<K, V> {
 8      @private
 9      def map:HashMap<K, V>
10  
11      @private
12      def default:V
13  
14      init(default:V) {
15          map := HashMap<K, V>()
16          self.default := default
17      }
18  
19      init(entries:CollectionView<(K, V)>, default:V) {
20          map := HashMap<K, V>(entries)
21          self.default := default
22      }
23  
24      @override
25      function [](key:K):V? {
26          return self[key]
27      }
28  
29      @priority(2)
30      function [](key:K):V {
31          def result := map[key]
32          if result !== null {
33              return result
34          }
35          return default
36      }
37  
38      @override
39      function contains(key:K):Bit {
40          return map.contains(key)
41      }
42  
43      @override
44      method []:=(key:K, value:V) {
45          map[key] := value
46      }
47  
48      @override
49      method remove(key:K) {
50          map.remove(key)
51      }
52  
53      @override
54      method clear() {
55          map.clear()
56      }
57  
58      @override
59      function get_entries():Iterator<(K, V)> {
60          return map.entries
61      }
62  
63      @override
64      function get_count():Int {
65          return map.count
66      }
67  
68      @override
69      method filterInPlace(test:(K, V)=>(Bit)) {
70          map.filterInPlace(test)
71      }
72  
73      @override
74      function get_toString():String {
75          return map.toString
76      }
77  }