4 using System.Collections.Generic;
8 namespace SiliconStudio.Core.IO
16 public class DictionaryStore<TKey, TValue> :
Store<KeyValuePair<TKey, TValue>>
18 protected readonly Dictionary<TKey, TValue> loadedIdMap =
new Dictionary<TKey, TValue>();
19 protected readonly Dictionary<TKey, UnsavedIdMapEntry> unsavedIdMap =
new Dictionary<TKey, UnsavedIdMapEntry>();
33 var result =
new KeyValuePair<TKey, TValue>[loadedIdMap.Count + unsavedIdMap.Count];
35 foreach (var value
in loadedIdMap)
39 foreach (var item
in unsavedIdMap)
41 result[i++] =
new KeyValuePair<TKey, TValue>(item.Key, item.Value.Value);
60 return TryGetValue(key, out value);
72 public TValue
this[TKey key]
77 if (!TryGetValue(key, out value))
78 throw new KeyNotFoundException();
83 AddValue(
new KeyValuePair<TKey, TValue>(key, value));
97 UnsavedIdMapEntry unsavedIdMapEntry;
98 if (unsavedIdMap.TryGetValue(key, out unsavedIdMapEntry))
100 value = unsavedIdMapEntry.Value;
104 return loadedIdMap.TryGetValue(key, out value);
112 var result =
new Dictionary<TKey, TValue>(loadedIdMap.Count + unsavedIdMap.Count);
114 foreach (var item
in loadedIdMap)
116 if (predicate(
new KeyValuePair<TKey, TValue>(item.Key, item.Value)))
118 result[item.Key] = item.Value;
122 foreach (var item
in unsavedIdMap)
124 if (predicate(
new KeyValuePair<TKey, TValue>(item.Key, item.Value.Value)))
126 result[item.Key] = item.Value.Value;
134 protected override void AddUnsaved(KeyValuePair<TKey, TValue> item,
int currentTransaction)
136 var unsavedIdMapEntry =
new UnsavedIdMapEntry { Value = item.Value, Transaction = currentTransaction };
137 unsavedIdMap[item.Key] = unsavedIdMapEntry;
140 protected override void RemoveUnsaved(KeyValuePair<TKey, TValue> item,
int currentTransaction)
142 UnsavedIdMapEntry entry;
143 if (unsavedIdMap.TryGetValue(item.Key, out entry))
145 if (entry.Transaction == currentTransaction)
147 unsavedIdMap.Remove(item.Key);
152 protected override void AddLoaded(KeyValuePair<TKey, TValue> item)
154 loadedIdMap[item.Key] = item.Value;
159 var transactionIds =
new List<KeyValuePair<TKey, TValue>>();
161 foreach (var unsavedIdMapEntry
in unsavedIdMap.Where(x => x.Value.Transaction == currentTransaction))
163 transactionIds.Add(
new KeyValuePair<TKey, TValue>(unsavedIdMapEntry.Key, unsavedIdMapEntry.Value.Value));
166 return transactionIds.ToArray();
172 unsavedIdMap.Clear();
175 protected struct UnsavedIdMapEntry
KeyValuePair< TKey, TValue >[] GetValues()
Gets the values stored including unsaved.
override IEnumerable< KeyValuePair< TKey, TValue > > GetPendingItems(int currentTransaction)
Gets the list of pending items for a given transaction index.
bool TryGetValue(TKey key, out TValue value)
Tries to get the value from its key.
override void AddLoaded(KeyValuePair< TKey, TValue > item)
bool Contains(TKey key)
Gets or sets the item with the specified key.
IEnumerable< KeyValuePair< TKey, TValue > > SearchValues(Func< KeyValuePair< TKey, TValue >, bool > predicate)
override void RemoveUnsaved(KeyValuePair< TKey, TValue > item, int currentTransaction)
DictionaryStore(Stream stream)
override void AddUnsaved(KeyValuePair< TKey, TValue > item, int currentTransaction)
override void ResetInternal()
Resets the store to an empty state, to be implemented by subclasses if necessary. ...