using System.Collections;
using XFEExtension.NetCore.AutoImplement;
namespace XFEExtension.NetCore.MemoryEditor.Manager;
///
/// 静态内存管理器
///
[CreateImpl]
public class StaticMemoryManager : MemoryManager
{
///
/// 地址值字典
///
public Dictionary ItemDictionary { get; set; } = [];
///
/// 索引器
///
/// 地址标识名
///
public StaticMemoryItem this[string addressName] => ItemDictionary[addressName];
internal override void Add(MemoryItemBuilder builder)
{
if (builder.staticMemoryAddress is null)
throw new ArgumentNullException(nameof(builder), "对于静态地址管理器,构建器的静态地址不可为空");
var staticMemoryItem = new StaticMemoryItemImpl(builder.name, builder.staticMemoryAddress.Value, builder.memoryAddressType, Editor);
if (builder.hasListener)
staticMemoryItem.AddListener(builder.listenerFrequency, builder.startListen);
ItemDictionary.Add(builder.name, staticMemoryItem);
}
///
/// 获取枚举器
///
///
public override IEnumerator GetEnumerator() => ItemDictionary.GetEnumerator();
///
/// 释放资源
///
/// 地址标识名称
public override void Remove(string addressName) => ItemDictionary.Remove(addressName);
///
/// 静态内存管理器
///
/// 内存构建器组
internal StaticMemoryManager(params MemoryItemBuilder[] builders)
{
Add(builders);
Editor.ValueChanged += (sender, e) => valueChanged?.Invoke(ItemDictionary[sender.Name], e);
}
}