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)
243 public bool RemoveEntityData(
string plugInId,
string entityId,
string valueId)
245 if (!data.TryGetValue(plugInId, out Dictionary<
string, Dictionary<string, DataEntry>> pluginData) ||
246 !pluginData.TryGetValue(entityId, out Dictionary<string, DataEntry> entityData) ||
247 !entityData.Remove(valueId))
252 if (entityData.Count == 0)
254 pluginData.Remove(entityId);
256 if (pluginData.Count == 0)
258 data.Remove(plugInId);
270 public bool RemoveEntityData(
string plugInId,
string entityId,
int valueId)
272 string id = ParserUtils.ToString(valueId);
273 return RemoveEntityData(plugInId, entityId,
id);
283 public bool RemoveEntityData(
string plugInId,
string entityId,
object obj)
285 if (data.TryGetValue(plugInId, out Dictionary<
string, Dictionary<string, DataEntry>> pluginData) &&
286 pluginData.TryGetValue(entityId, out Dictionary<string, DataEntry> entityData))
288 foreach (KeyValuePair<string, DataEntry> entry
in entityData)
290 if (ReferenceEquals(entry.Value.Value, obj))
292 return RemoveEntityData(plugInId, entityId, entry.Key);
304 public void ClearEntityData(
string plugInId,
string entityId)
306 if (data.TryGetValue(plugInId, out Dictionary<
string, Dictionary<string, DataEntry>> pluginData))
308 pluginData.Remove(entityId);
309 if (pluginData.Count == 0)
311 data.Remove(plugInId);
319 public void ClearTemporaryData()
321 foreach (KeyValuePair<
string, Dictionary<
string, Dictionary<string, DataEntry>>> pluginPair
in data.ToList())
323 Dictionary<string, Dictionary<string, DataEntry>> pluginData = pluginPair.Value;
324 foreach (KeyValuePair<
string, Dictionary<string, DataEntry>> entityPair
in pluginData.ToList())
326 Dictionary<string, DataEntry> entityData = entityPair.Value;
327 List<string> keysToRemove =
new List<string>();
328 foreach (KeyValuePair<string, DataEntry> kvp
in entityData)
330 if (!kvp.Value.Persistent)
332 keysToRemove.Add(kvp.Key);
335 foreach (
string key
in keysToRemove)
337 entityData.Remove(key);
339 if (entityData.Count == 0)
341 pluginData.Remove(entityPair.Key);
344 if (pluginData.Count == 0)
346 data.Remove(pluginPair.Key);
354 public void ClearData()
362 private class DataEntry
367 public object Value {
get; }
371 public bool Persistent {
get; }
378 public DataEntry(
object value,
bool persistent)
381 Persistent = persistent;