namespace Qrakhen.Qamp.Core.Values.Objects; public abstract class ItemProvider(ValueType type) : Obj(type) { public void Set(Value index, Value value) { T _index = ExtractIndex(index); AssertValidAccesor(_index); InnerSet(_index, value); } public Value Get(Value index) { T _index = ExtractIndex(index); AssertValidAccesor(_index); return InnerGet(_index); } protected abstract Value InnerGet(T index); protected abstract void InnerSet(T index, Value value); protected abstract void AssertValidAccesor(T index); protected abstract T ExtractIndex(Value value); } public class ItemProviderException(string message, object context) : QampException(message, context);