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}