8using System.Collections.Generic;
17 internal class AuxiliaryData
22 private const string DEFAULT_ENTITY_ID =
"";
25 private readonly Dictionary<string, Dictionary<string, Dictionary<string, DataEntry>>> data
26 =
new Dictionary<string, Dictionary<string, Dictionary<string, DataEntry>>>();
36 public void SetData(
string plugInId,
int valueId,
object value,
bool persistent =
false)
38 string id = ParserUtils.ToString(valueId);
39 SetData(plugInId,
id, value, persistent);
50 public void SetData(
string plugInId,
int entityId,
string valueId,
object value,
bool persistent =
false)
52 string id = ParserUtils.ToString(entityId);
53 SetData(plugInId,
id, valueId, value, persistent);
63 public void SetData(
string plugInId,
string valueId,
object value,
bool persistent =
false)
65 SetData(plugInId, DEFAULT_ENTITY_ID, valueId, value, persistent);
76 public void SetData(
string plugInId,
string entityId,
int valueId,
object value,
bool persistent =
false)
78 string id = ParserUtils.ToString(valueId);
79 SetData(plugInId, entityId,
id, value, persistent);
90 public void SetData(
string plugInId,
string entityId,
string valueId,
object value,
bool persistent =
false)
92 if (!data.TryGetValue(plugInId, out Dictionary<
string, Dictionary<string, DataEntry>> pluginData))
94 pluginData =
new Dictionary<string, Dictionary<string, DataEntry>>();
95 data[plugInId] = pluginData;
98 if (!pluginData.TryGetValue(entityId, out Dictionary<string, DataEntry> entityData))
100 entityData =
new Dictionary<string, DataEntry>();
101 pluginData[entityId] = entityData;
104 entityData[valueId] =
new DataEntry(value, persistent);
113 public object GetData(
string plugInId,
int valueId)
115 string id = ParserUtils.ToString(valueId);
116 return GetData(plugInId,
id);
125 public object GetData(
string plugInId,
string valueId)
127 return GetData(plugInId, DEFAULT_ENTITY_ID, valueId);
137 public object GetData(
string plugInId,
int entityId,
string valueId)
139 string id = ParserUtils.ToString(entityId);
140 return GetData(plugInId,
id, valueId);
150 public object GetData(
string plugInId,
string entityId,
string valueId)
152 if (data.TryGetValue(plugInId, out Dictionary<
string, Dictionary<string, DataEntry>> pluginData) &&
153 pluginData.TryGetValue(entityId, out Dictionary<string, DataEntry> entityData) &&
154 entityData.TryGetValue(valueId, out DataEntry entry))
168 public T GetData<T>(
string plugInId,
int valueId)
170 string id = ParserUtils.ToString(valueId);
171 return GetData<T>(plugInId,
id);
181 public T GetData<T>(
string plugInId,
string valueId)
183 return GetData<T>(plugInId, DEFAULT_ENTITY_ID, valueId);
194 public T GetData<T>(
string plugInId,
string entityId,
int valueId)
196 string id = ParserUtils.ToString(valueId);
197 return GetData<T>(plugInId, entityId,
id);
208 public T GetData<T>(
string plugInId,
string entityId,
string valueId)
210 object value = GetData(plugInId, entityId, valueId);
211 return value is T ? (T)value : default;
214 public List<T> GetDataList<T>(
string plugInId)
216 return GetDataList<T>(plugInId, DEFAULT_ENTITY_ID);
219 public List<T> GetDataList<T>(
string plugInId,
string entityId)
221 List<T> result =
new List<T>();
222 if (data.TryGetValue(plugInId, out Dictionary<
string, Dictionary<string, DataEntry>> pluginData) &&
223 pluginData.TryGetValue(entityId, out Dictionary<string, DataEntry> entityData))
225 foreach (KeyValuePair<string, DataEntry> entry
in entityData)
227 if (entry.Value.Value is T value)
239 public void ClearTemporaryData()
241 foreach (KeyValuePair<
string, Dictionary<
string, Dictionary<string, DataEntry>>> pluginPair
in data.ToList())
243 Dictionary<string, Dictionary<string, DataEntry>> pluginData = pluginPair.Value;
244 foreach (KeyValuePair<
string, Dictionary<string, DataEntry>> entityPair
in pluginData.ToList())
246 Dictionary<string, DataEntry> entityData = entityPair.Value;
247 List<string> keysToRemove =
new List<string>();
248 foreach (KeyValuePair<string, DataEntry> kvp
in entityData)
250 if (!kvp.Value.Persistent)
252 keysToRemove.Add(kvp.Key);
255 foreach (
string key
in keysToRemove)
257 entityData.Remove(key);
259 if (entityData.Count == 0)
261 pluginData.Remove(entityPair.Key);
264 if (pluginData.Count == 0)
266 data.Remove(pluginPair.Key);
274 public void ClearData()
282 private class DataEntry
287 public object Value {
get; }
291 public bool Persistent {
get; }
298 public DataEntry(
object value,
bool persistent)
301 Persistent = persistent;