47 lines
1.2 KiB
C#
47 lines
1.2 KiB
C#
using System.Collections;
|
|
|
|
namespace Qrakhen.Qamp.Core.Collections;
|
|
|
|
/// <summary>
|
|
/// Dictionary wrapper implementing <see cref="IGetSet{TKey, TValue}"/>.
|
|
/// </summary>
|
|
public class Register<TKey, TValue> :
|
|
IGetSet<TKey, TValue>,
|
|
IToArray<TValue>,
|
|
IEnumerable<KeyValuePair<TKey, TValue>>
|
|
where TKey : notnull
|
|
{
|
|
private readonly Dictionary<TKey, TValue> _data = new();
|
|
|
|
public int Length => _data.Count;
|
|
|
|
public TValue this[TKey key] {
|
|
get => Get(key);
|
|
set => Set(key, value);
|
|
}
|
|
|
|
public TKey Add(TKey key, TValue value)
|
|
{
|
|
_data.Add(key, value);
|
|
return key;
|
|
}
|
|
|
|
public bool TryGet(TKey key, out TValue? value) => _data.TryGetValue(key, out value);
|
|
public TValue Get(TKey key) => _data[key];
|
|
public void Set(TKey key, TValue value) => _data[key] = value;
|
|
public bool Has(TKey key) => _data.ContainsKey(key);
|
|
|
|
public TValue[] ToArray() => _data.Values.ToArray();
|
|
|
|
public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
|
|
{
|
|
foreach (var item in _data)
|
|
yield return item;
|
|
}
|
|
|
|
IEnumerator IEnumerable.GetEnumerator()
|
|
{
|
|
return GetEnumerator();
|
|
}
|
|
}
|