move settings class out of RamSearchEngine

This commit is contained in:
adelikat 2020-03-03 11:46:10 -06:00
parent 3a0df3f543
commit a151bd7424
3 changed files with 71 additions and 67 deletions

View File

@ -14,13 +14,13 @@ namespace BizHawk.Client.Common.RamSearchEngine
private Compare _compareTo = Compare.Previous;
private List<IMiniWatch> _watchList = new List<IMiniWatch>();
private readonly Settings _settings;
private readonly SearchEngineSettings _settings;
private readonly UndoHistory<IMiniWatch> _history = new UndoHistory<IMiniWatch>(true);
private bool _isSorted = true; // Tracks whether or not the list is sorted by address, if it is, binary search can be used for finding watches
public RamSearchEngine(Settings settings, IMemoryDomains memoryDomains)
public RamSearchEngine(SearchEngineSettings settings, IMemoryDomains memoryDomains)
{
_settings = new Settings(memoryDomains)
_settings = new SearchEngineSettings(memoryDomains)
{
Mode = settings.Mode,
Domain = settings.Domain,
@ -32,7 +32,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
};
}
public RamSearchEngine(Settings settings, IMemoryDomains memoryDomains, Compare compareTo, long? compareValue, int? differentBy)
public RamSearchEngine(SearchEngineSettings settings, IMemoryDomains memoryDomains, Compare compareTo, long? compareValue, int? differentBy)
: this(settings, memoryDomains)
{
_compareTo = compareTo;
@ -62,7 +62,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
{
default:
case WatchSize.Byte:
if (_settings.Mode == Settings.SearchMode.Detailed)
if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{
for (int i = 0; i < domain.Size; i++)
{
@ -79,7 +79,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
break;
case WatchSize.Word:
if (_settings.Mode == Settings.SearchMode.Detailed)
if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{
for (int i = 0; i < domain.Size - 1; i += _settings.CheckMisAligned ? 1 : 2)
{
@ -96,7 +96,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
break;
case WatchSize.DWord:
if (_settings.Mode == Settings.SearchMode.Detailed)
if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{
for (int i = 0; i < domain.Size - 3; i += _settings.CheckMisAligned ? 1 : 4)
{
@ -122,7 +122,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
{
get
{
if (_settings.Mode == Settings.SearchMode.Detailed)
if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{
return Watch.GenerateWatch(
_settings.Domain,
@ -194,7 +194,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
public int Count => _watchList.Count;
public Settings.SearchMode Mode => _settings.Mode;
public SearchEngineSettings.SearchMode Mode => _settings.Mode;
public MemoryDomain Domain => _settings.Domain;
@ -225,7 +225,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
public void Update()
{
if (_settings.Mode == Settings.SearchMode.Detailed)
if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{
foreach (IMiniWatchDetails watch in _watchList)
{
@ -247,7 +247,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
/// <exception cref="InvalidOperationException"><see cref="Mode"/> is <see cref="Settings.SearchMode.Fast"/> and <paramref name="type"/> is <see cref="PreviousType.LastFrame"/></exception>
public void SetPreviousType(PreviousType type)
{
if (_settings.Mode == Settings.SearchMode.Fast)
if (_settings.Mode == SearchEngineSettings.SearchMode.Fast)
{
if (type == PreviousType.LastFrame)
{
@ -265,7 +265,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
public void ClearChangeCounts()
{
if (_settings.Mode == Settings.SearchMode.Detailed)
if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{
foreach (var watch in _watchList.Cast<IMiniWatchDetails>())
{
@ -311,7 +311,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
{
default:
case WatchSize.Byte:
if (_settings.Mode == Settings.SearchMode.Detailed)
if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{
foreach (var addr in addresses)
{
@ -328,7 +328,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
break;
case WatchSize.Word:
if (_settings.Mode == Settings.SearchMode.Detailed)
if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{
foreach (var addr in addresses)
{
@ -345,7 +345,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
break;
case WatchSize.DWord:
if (_settings.Mode == Settings.SearchMode.Detailed)
if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{
foreach (var addr in addresses)
{
@ -394,7 +394,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
break;
case WatchList.CHANGES:
if (_settings.Mode == Settings.SearchMode.Detailed)
if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{
if (reverse)
{
@ -611,7 +611,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
private IEnumerable<IMiniWatch> CompareChanges(IEnumerable<IMiniWatch> watchList)
{
if (_settings.Mode == Settings.SearchMode.Detailed && CompareValue.HasValue)
if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed && CompareValue.HasValue)
{
var compareValue = CompareValue.Value;
switch (Operator)
@ -760,45 +760,12 @@ namespace BizHawk.Client.Common.RamSearchEngine
{
return _settings.Mode switch
{
Settings.SearchMode.Detailed => true,
Settings.SearchMode.Fast => (compareType != Compare.Changes),
SearchEngineSettings.SearchMode.Detailed => true,
SearchEngineSettings.SearchMode.Fast => (compareType != Compare.Changes),
_ => true
};
}
#endregion
public class Settings
{
public Settings(IMemoryDomains memoryDomains)
{
BigEndian = memoryDomains.MainMemory.EndianType == MemoryDomain.Endian.Big;
Size = (WatchSize)memoryDomains.MainMemory.WordSize;
Type = DisplayType.Unsigned;
Mode = memoryDomains.MainMemory.Size > 1024 * 1024
? SearchMode.Fast
: SearchMode.Detailed;
Domain = memoryDomains.MainMemory;
CheckMisAligned = false;
PreviousType = PreviousType.LastSearch;
}
/*Require restart*/
public enum SearchMode
{
Fast, Detailed
}
public SearchMode Mode { get; set; }
public MemoryDomain Domain { get; set; }
public WatchSize Size { get; set; }
public bool CheckMisAligned { get; set; }
/*Can be changed mid-search*/
public DisplayType Type { get; set; }
public bool BigEndian { get; set; }
public PreviousType PreviousType { get; set; }
}
}
}

View File

@ -0,0 +1,37 @@
using BizHawk.Emulation.Common;
namespace BizHawk.Client.Common.RamSearchEngine
{
public class SearchEngineSettings
{
public SearchEngineSettings(IMemoryDomains memoryDomains)
{
BigEndian = memoryDomains.MainMemory.EndianType == MemoryDomain.Endian.Big;
Size = (WatchSize)memoryDomains.MainMemory.WordSize;
Type = DisplayType.Unsigned;
Mode = memoryDomains.MainMemory.Size > 1024 * 1024
? SearchMode.Fast
: SearchMode.Detailed;
Domain = memoryDomains.MainMemory;
CheckMisAligned = false;
PreviousType = PreviousType.LastSearch;
}
/*Require restart*/
public enum SearchMode
{
Fast, Detailed
}
public SearchMode Mode { get; set; }
public MemoryDomain Domain { get; set; }
public WatchSize Size { get; set; }
public bool CheckMisAligned { get; set; }
/*Can be changed mid-search*/
public DisplayType Type { get; set; }
public bool BigEndian { get; set; }
public PreviousType PreviousType { get; set; }
}
}

View File

@ -29,7 +29,7 @@ namespace BizHawk.Client.EmuHawk
private string _currentFileName = "";
private RamSearchEngine _searches;
private RamSearchEngine.Settings _settings;
private SearchEngineSettings _settings;
private int _defaultWidth;
private int _defaultHeight;
@ -122,7 +122,7 @@ namespace BizHawk.Client.EmuHawk
RamSearchMenu.Items.Add(WatchListView.ToColumnsMenu(ColumnToggleCallback));
_settings = new RamSearchEngine.Settings(MemoryDomains);
_settings = new SearchEngineSettings(MemoryDomains);
_searches = new RamSearchEngine(_settings, MemoryDomains);
ErrorIconButton.Visible = false;
@ -150,7 +150,7 @@ namespace BizHawk.Client.EmuHawk
_dropdownDontfire = false;
if (_settings.Mode == RamSearchEngine.Settings.SearchMode.Fast)
if (_settings.Mode == SearchEngineSettings.SearchMode.Fast)
{
SetToFastMode();
}
@ -312,7 +312,7 @@ namespace BizHawk.Client.EmuHawk
public void Restart()
{
_settings = new RamSearchEngine.Settings(MemoryDomains);
_settings = new SearchEngineSettings(MemoryDomains);
_searches = new RamSearchEngine(_settings, MemoryDomains);
MessageLabel.Text = "Search restarted";
DoDomainSizeCheck();
@ -606,9 +606,9 @@ namespace BizHawk.Client.EmuHawk
private void DoDomainSizeCheck()
{
if (_settings.Domain.Size >= MaxDetailedSize
&& _settings.Mode == RamSearchEngine.Settings.SearchMode.Detailed)
&& _settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{
_settings.Mode = RamSearchEngine.Settings.SearchMode.Fast;
_settings.Mode = SearchEngineSettings.SearchMode.Fast;
SetReboot(true);
MessageLabel.Text = "Large domain, switching to fast mode";
}
@ -768,7 +768,7 @@ namespace BizHawk.Client.EmuHawk
private void SetToDetailedMode()
{
_settings.Mode = RamSearchEngine.Settings.SearchMode.Detailed;
_settings.Mode = SearchEngineSettings.SearchMode.Detailed;
NumberOfChangesRadio.Enabled = true;
NumberOfChangesBox.Enabled = true;
DifferenceRadio.Enabled = true;
@ -797,7 +797,7 @@ namespace BizHawk.Client.EmuHawk
private void SetToFastMode()
{
_settings.Mode = RamSearchEngine.Settings.SearchMode.Fast;
_settings.Mode = SearchEngineSettings.SearchMode.Fast;
if (_settings.PreviousType == PreviousType.LastFrame || _settings.PreviousType == PreviousType.LastChange)
{
@ -1074,8 +1074,8 @@ namespace BizHawk.Client.EmuHawk
private void ModeSubMenu_DropDownOpened(object sender, EventArgs e)
{
DetailedMenuItem.Checked = _settings.Mode == RamSearchEngine.Settings.SearchMode.Detailed;
FastMenuItem.Checked = _settings.Mode == RamSearchEngine.Settings.SearchMode.Fast;
DetailedMenuItem.Checked = _settings.Mode == SearchEngineSettings.SearchMode.Detailed;
FastMenuItem.Checked = _settings.Mode == SearchEngineSettings.SearchMode.Fast;
}
private void MemoryDomainsSubMenu_DropDownOpened(object sender, EventArgs e)
@ -1152,8 +1152,8 @@ namespace BizHawk.Client.EmuHawk
break;
}
PreviousFrameMenuItem.Enabled = _settings.Mode != RamSearchEngine.Settings.SearchMode.Fast;
Previous_LastChangeMenuItem.Enabled = _settings.Mode != RamSearchEngine.Settings.SearchMode.Fast;
PreviousFrameMenuItem.Enabled = _settings.Mode != SearchEngineSettings.SearchMode.Fast;
Previous_LastChangeMenuItem.Enabled = _settings.Mode != SearchEngineSettings.SearchMode.Fast;
}
private void DetailedMenuItem_Click(object sender, EventArgs e)
@ -1219,7 +1219,7 @@ namespace BizHawk.Client.EmuHawk
private void SearchSubMenu_DropDownOpened(object sender, EventArgs e)
{
ClearChangeCountsMenuItem.Enabled = _settings.Mode == RamSearchEngine.Settings.SearchMode.Detailed;
ClearChangeCountsMenuItem.Enabled = _settings.Mode == SearchEngineSettings.SearchMode.Detailed;
RemoveMenuItem.Enabled =
AddToRamWatchMenuItem.Enabled =
@ -1410,8 +1410,8 @@ namespace BizHawk.Client.EmuHawk
RamSearchMenu.Items.Add(WatchListView.ToColumnsMenu(ColumnToggleCallback));
_settings = new RamSearchEngine.Settings(MemoryDomains);
if (_settings.Mode == RamSearchEngine.Settings.SearchMode.Fast)
_settings = new SearchEngineSettings(MemoryDomains);
if (_settings.Mode == SearchEngineSettings.SearchMode.Fast)
{
SetToFastMode();
}