4 using System.Collections.Generic;
7 namespace SiliconStudio.Core.IO
14 public class ListStore<T> :
Store<T> where T : new()
16 protected readonly List<T> loadedIdMap =
new List<T>();
17 protected readonly LinkedList<UnsavedEntry> unsavedIdMap =
new LinkedList<UnsavedEntry>();
29 var result =
new T[loadedIdMap.Count + unsavedIdMap.Count];
31 for (i = 0; i < loadedIdMap.Count; ++i)
33 result[i] = loadedIdMap[i];
35 foreach (var item
in unsavedIdMap)
37 result[i++] = item.Value;
44 protected override void AddUnsaved(T item,
int currentTransaction)
46 unsavedIdMap.AddLast(
new UnsavedEntry { Value = item, Transaction = currentTransaction });
51 RemoveUnsaved(null, currentTransaction);
56 var node = unsavedIdMap.First;
61 var nodeTransaction = node.Value.Transaction;
62 if (nodeTransaction == currentTransaction)
63 unsavedIdMap.Remove(node);
64 else if (nodeTransaction > currentTransaction)
72 loadedIdMap.Add(item);
77 var transactionIds =
new List<T>();
79 foreach (var item
in unsavedIdMap)
81 if (item.Transaction < currentTransaction)
83 if (item.Transaction > currentTransaction)
86 transactionIds.Add(item.Value);
89 return transactionIds;
92 protected class UnsavedEntry
override void AddLoaded(T item)
Adds a value that has already been saved in the store (saved state).
override void RemoveUnsaved(T item, int currentTransaction)
Removes a value that has not yet been saved (pending state).
override IEnumerable< T > GetPendingItems(int currentTransaction)
Gets the list of pending items for a given transaction index.
override void RemoveUnsaved(IEnumerable< T > items, int currentTransaction)
Removes values that have not yet been saved (pending state).
override void AddUnsaved(T item, int currentTransaction)
Adds a value that has not yet been saved in the store (pending state).