Ram Search - make manually deleting items a lot faster, since it was taking many many minutes when user was manually deleting an absurd number at once

This commit is contained in:
adelikat 2014-07-03 01:46:14 +00:00
parent 8362d078a4
commit 461b73f1df
3 changed files with 27 additions and 11 deletions

View File

@ -340,14 +340,30 @@ namespace BizHawk.Client.Common
}
}
public void RemoveRange(IEnumerable<int> addresses)
/// <summary>
/// Remove a set of watches
/// However, this should not be used with large data sets (100k or more) as it uses a contains logic to perform the task
/// </summary>
public void RemoveSmallWatchRange(IEnumerable<Watch> watches)
{
if (_keepHistory)
{
_history.AddState(_watchList);
}
_watchList = _watchList.Where(x => !addresses.Contains(x.Address)).ToList();
var addresses = watches.Select(x => x.Address ?? 0);
var removeList = _watchList.Where(x => !addresses.Contains(x.Address)).ToList();
}
public void RemoveRange(IEnumerable<int> indices)
{
if (_keepHistory)
{
_history.AddState(_watchList);
}
var removeList = indices.Select(i => _watchList[i]);
_watchList = _watchList.Except(removeList).ToList();
}
public void AddRange(List<int> addresses, bool append)

View File

@ -783,9 +783,7 @@ namespace BizHawk.Client.EmuHawk
if (indices.Any())
{
SetRemovedMessage(indices.Count);
var addresses = indices.Select(index => _searches[index].Address ?? 0).ToList();
_searches.RemoveRange(addresses);
_searches.RemoveRange(indices);
WatchListView.ItemCount = _searches.Count;
SetTotal();
@ -805,12 +803,14 @@ namespace BizHawk.Client.EmuHawk
var watches = new WatchList(_settings.Domain);
watches.Load(file.FullName, append);
var addresses = watches.Where(x => !x.IsSeparator).Select(x => x.Address ?? 0).ToList();
var watchList = watches.Where(x => !x.IsSeparator);
var addresses = watchList.Select(x => x.Address ?? 0).ToList();
if (truncate)
{
SetRemovedMessage(addresses.Count);
_searches.RemoveRange(addresses);
_searches.RemoveSmallWatchRange(watchList);
}
else
{
@ -867,7 +867,7 @@ namespace BizHawk.Client.EmuHawk
{
if (GlobalWin.Tools.Has<RamWatch>())
{
_searches.RemoveRange(GlobalWin.Tools.RamWatch.AddressList);
_searches.RemoveSmallWatchRange(GlobalWin.Tools.RamWatch.Watches);
WatchListView.ItemCount = _searches.Count;
SetTotal();
}
@ -1479,7 +1479,7 @@ namespace BizHawk.Client.EmuHawk
SetRemovedMessage(outOfRangeAddresses.Count);
_searches.RemoveRange(outOfRangeAddresses);
//_searches.RemoveRange(outOfRangeAddresses); Remove TODO
WatchListView.ItemCount = _searches.Count;
SetTotal();

View File

@ -73,11 +73,11 @@ namespace BizHawk.Client.EmuHawk
#region Properties
public IEnumerable<int> AddressList
public IEnumerable<Watch> Watches
{
get
{
return _watches.Where(x => !x.IsSeparator).Select(x => x.Address ?? 0);
return _watches.Where(x => !x.IsSeparator);
}
}