PkmnLibRSharp/PkmnLibRSharp/StaticData/Libraries/DataLibrary.cs

49 lines
1.5 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using PkmnLibSharp.Utils;
namespace PkmnLibSharp.StaticData.Libraries
{
public abstract class DataLibrary<T> : HandleType, IReadOnlyDictionary<string, T> where T : HandleType
{
private Dictionary<string, T> _backingDictionary = new(StringComparer.InvariantCultureIgnoreCase);
protected DataLibrary(FFIHandle handle) : base(handle)
{
}
protected void ReserveCapacity(ulong capacity)
{
_backingDictionary = new Dictionary<string, T>((int)capacity, StringComparer.InvariantCultureIgnoreCase);
}
public IEnumerator<KeyValuePair<string, T>> GetEnumerator()
{
return _backingDictionary.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
protected abstract void AddNative(string key, T value);
public void Add(string key, T value)
{
AddNative(key, value);
_backingDictionary.Add(key, value);
}
public int Count => _backingDictionary.Count;
public bool ContainsKey(string key) => _backingDictionary.ContainsKey(key);
public bool TryGetValue(string key, out T value) => _backingDictionary.TryGetValue(key, out value);
public T this[string key] => _backingDictionary[key];
public IEnumerable<string> Keys => _backingDictionary.Keys;
public IEnumerable<T> Values => _backingDictionary.Values;
}
}