main
 1using System.Collections.Generic;
 2
 3namespace momoney.database.transactions
 4{
 5    public interface IIdentityMap<TKey, TValue>
 6    {
 7        IEnumerable<TValue> all();
 8        void add(TKey key, TValue value);
 9        void update_the_item_for(TKey key, TValue new_value);
10        bool contains_an_item_for(TKey key);
11        TValue item_that_belongs_to(TKey key);
12        void evict(TKey key);
13    }
14
15    public class IdentityMap<TKey, TValue> : IIdentityMap<TKey, TValue>
16    {
17        readonly IDictionary<TKey, TValue> items_in_map;
18
19        public IdentityMap() : this(new Dictionary<TKey, TValue>())
20        {
21        }
22
23        public IdentityMap(IDictionary<TKey, TValue> items_in_map)
24        {
25            this.items_in_map = items_in_map;
26        }
27
28        public IEnumerable<TValue> all()
29        {
30            return items_in_map.Values;
31        }
32
33        public void add(TKey key, TValue value)
34        {
35            items_in_map.Add(key, value);
36        }
37
38        public void update_the_item_for(TKey key, TValue new_value)
39        {
40            if (contains_an_item_for(key)) items_in_map[key] = new_value;
41            else add(key, new_value);
42        }
43
44        public bool contains_an_item_for(TKey key)
45        {
46            return items_in_map.ContainsKey(key);
47        }
48
49        public TValue item_that_belongs_to(TKey key)
50        {
51            return contains_an_item_for(key) ? items_in_map[key] : default(TValue);
52        }
53
54        public void evict(TKey key)
55        {
56            if (contains_an_item_for(key)) items_in_map.Remove(key);
57        }
58    }
59}