using System; using PkmnLibSharp.FFI; using PkmnLibSharp.Utils; using Interface = PkmnLibSharp.FFI.StaticData.Libraries.AbilityLibrary; namespace PkmnLibSharp.StaticData.Libraries { public class AbilityLibrary : DataLibrary { public AbilityLibrary(ulong capacity) : base(Interface.ability_library_new(capacity), true) { } internal AbilityLibrary(IdentifiablePointer ptr, bool isOwner) : base(ptr, isOwner) { } protected override void Destructor() => Interface.ability_library_drop(Ptr); public override void Add(string key, Ability value) => Interface.ability_library_add(Ptr, key.ToPtr(), value.TakeOwnershipAndInvalidate()); public override int Count => (int)Interface.ability_library_len(Ptr); protected override Ability? GetValueByKey(string key) { var ptr = Interface.ability_library_get(Ptr, key.ToPtr()); return ptr.Ptr == IntPtr.Zero ? null : new Ability(ptr); } public override string? GetKeyByIndex(ulong index) => Interface.ability_library_get_key_by_index(Ptr, index).PtrString(); public override void InvalidateChildren() { foreach (var value in Cache.ValueCache.Values) { value.Invalidate(); } } ~AbilityLibrary() { Dispose(); } } }