Minor cleanup in MGBAMemoryCallbackSystem

This commit is contained in:
YoshiRulz 2021-09-20 04:50:36 +10:00
parent a3ac843c76
commit 2515e73543
No known key found for this signature in database
GPG Key ID: C4DE31C245353FB7
1 changed files with 19 additions and 20 deletions

View File

@ -67,26 +67,29 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
_callbacks.Add(container);
}
private void Remove(CallbackContainer cb)
{
if (MGBAHawk.ZZHacky.BizClearWatchpoint(_mgba.Core, cb.ID)) _callbacks.Remove(cb);
}
public void Remove(MemoryCallbackDelegate action)
{
var cbToRemove = _callbacks.SingleOrDefault(container => container.Callback.Callback == action);
if (cbToRemove == null) return;
if (cbToRemove != null)
if (cbToRemove.Callback.Type is MemoryCallbackType.Execute)
{
if (cbToRemove.Callback.Type == MemoryCallbackType.Execute)
_callbacks.Remove(cbToRemove);
if (!_callbacks.Any(cb => cb.Callback.Type is MemoryCallbackType.Execute))
{
_callbacks.Remove(cbToRemove);
if (_callbacks.All(cb => cb.Callback.Type != MemoryCallbackType.Execute))
{
_executeCallback = null;
MGBAHawk.ZZHacky.BizSetExecCallback(_mgba.Core, null);
}
}
else if (MGBAHawk.ZZHacky.BizClearWatchpoint(_mgba.Core, cbToRemove.ID))
{
_callbacks.Remove(cbToRemove);
_executeCallback = null;
MGBAHawk.ZZHacky.BizSetExecCallback(_mgba.Core, null);
}
}
else
{
Remove(cbToRemove);
}
}
public void RemoveAll(IEnumerable<MemoryCallbackDelegate> actions)
@ -99,17 +102,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
public void Clear()
{
foreach (var cb in _callbacks)
{
if (MGBAHawk.ZZHacky.BizClearWatchpoint(_mgba.Core, cb.ID))
{
_callbacks.Remove(cb);
}
}
foreach (var cb in _callbacks) Remove(cb);
}
public IEnumerator<IMemoryCallback> GetEnumerator() => _callbacks.Select(c => c.Callback).GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => _callbacks.Select(c => c.Callback).GetEnumerator();
IEnumerator IEnumerable.GetEnumerator()
=> GetEnumerator();
public void CallMemoryCallbacks(uint addr, uint value, uint flags, string scope)
{