diff --git a/PkmnLibSharp.sln.DotSettings b/PkmnLibSharp.sln.DotSettings
new file mode 100644
index 0000000..fe64f51
--- /dev/null
+++ b/PkmnLibSharp.sln.DotSettings
@@ -0,0 +1,2 @@
+
+ True
\ No newline at end of file
diff --git a/PkmnLibSharp/Library/MoveData.cs b/PkmnLibSharp/Library/MoveData.cs
index e356ba5..3d383e1 100644
--- a/PkmnLibSharp/Library/MoveData.cs
+++ b/PkmnLibSharp/Library/MoveData.cs
@@ -46,7 +46,7 @@ namespace PkmnLibSharp.Library
return new MoveData(ptr);
}
- private MoveData(IntPtr ptr) : base(ptr)
+ internal MoveData(IntPtr ptr) : base(ptr)
{
}
diff --git a/PkmnLibSharp/Library/MoveLibrary.cs b/PkmnLibSharp/Library/MoveLibrary.cs
new file mode 100644
index 0000000..d27ac1e
--- /dev/null
+++ b/PkmnLibSharp/Library/MoveLibrary.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using Creatureliblibrary.Generated;
+using PkmnLibSharp.Utilities;
+
+namespace PkmnLibSharp.Library
+{
+ public class MoveLibrary : PointerWrapper
+ {
+ private readonly Dictionary _cache = new Dictionary(StringComparer.InvariantCultureIgnoreCase);
+ public ulong Count => AttackLibrary.GetCount(Ptr);
+
+ public void Insert(string key, MoveData move)
+ {
+ AttackLibrary.Insert(Ptr, key.ToPtr(), move.Ptr).Assert();
+ _cache.Add(key, move);
+ }
+
+ public void Delete(string key)
+ {
+ AttackLibrary.Delete(Ptr, key.ToPtr()).Assert();
+ _cache.Remove(key);
+ }
+
+ public bool TryGet(string key, out MoveData move)
+ {
+ if (_cache.TryGetValue(key, out move))
+ return true;
+ var ptr = IntPtr.Zero;
+ if (AttackLibrary.TryGet(Ptr, key.ToPtr(), ref ptr) != MarshalHelper.True)
+ return false;
+ if (TryResolvePointer(ptr, out move))
+ {
+ _cache.Add(key, move);
+ return true;
+ }
+ move = new MoveData(ptr);
+ _cache.Add(key, move);
+ return true;
+ }
+
+ public MoveData Get(string key)
+ {
+ if (_cache.TryGetValue(key, out var move))
+ return move;
+ var ptr = IntPtr.Zero;
+ AttackLibrary.Get(Ptr, key.ToPtr(), ref ptr).Assert();
+ if (TryResolvePointer(ptr, out move))
+ {
+ _cache.Add(key, move);
+ return move;
+ }
+ move = new MoveData(ptr);
+ _cache.Add(key, move);
+ return move;
+ }
+
+ public static MoveLibrary Create(ulong defaultCapacity)
+ {
+ var ptr = IntPtr.Zero;
+ AttackLibrary.Construct(ref ptr, defaultCapacity).Assert();
+ return new MoveLibrary(ptr);
+ }
+
+ private MoveLibrary(IntPtr ptr) : base(ptr)
+ {
+ }
+
+ protected override void DeletePtr()
+ {
+ AttackLibrary.Destruct(Ptr);
+ }
+ }
+}
\ No newline at end of file