using Dalamud.Plugin.Services; using Dalamud.Plugin; using FFXIVClientStructs.FFXIV.Common.Lua; using OtterGui.Log; using Penumbra.GameData.Data; using Penumbra.GameData.DataContainers.Bases; using Penumbra.GameData.Structs; using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CustomizePlus.GameData.ReverseSearchDictionaries.Bases; /// A base class for dictionaries from NPC names to their IDs. /// The plugin interface. /// A logger. /// The data manger to fetch the data from. /// The name of the data share. /// The version of the data share. /// The factory function to create the data from. public abstract class ReverseNameDictionary( IDalamudPluginInterface pluginInterface, Logger log, IDataManager gameData, string name, int version, Func> factory) : DataSharer>(pluginInterface, log, name, gameData.Language, version, factory), IReadOnlyDictionary { /// public IEnumerator> GetEnumerator() => Value.Select(kvp => new KeyValuePair(kvp.Key, new NpcId(kvp.Value))).GetEnumerator(); /// IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); /// public int Count => Value.Count; /// public bool ContainsKey(string key) => Value.ContainsKey(key); /// public bool TryGetValue(string key, [NotNullWhen(true)] out NpcId value) { if (!Value.TryGetValue(key, out var uintVal)) { value = default; return false; } value = new NpcId(uintVal); return true; } /// public NpcId this[string key] => new NpcId(Value[key]); /// public IEnumerable Keys => Value.Keys; /// public IEnumerable Values => Value.Values.Select(k => new NpcId(k)); /// protected override long ComputeMemory() => DataUtility.DictionaryMemory(16, Count) + Keys.Sum(v => v.Length * 2); //this seems to be only used by diagnostics stuff so I don't particularly care for this to be correct. /// protected override int ComputeTotalCount() => Count; }