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 Compare _compareTo = Compare.Previous;
private List<IMiniWatch> _watchList = new List<IMiniWatch>(); 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 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 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, Mode = settings.Mode,
Domain = settings.Domain, 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) : this(settings, memoryDomains)
{ {
_compareTo = compareTo; _compareTo = compareTo;
@ -62,7 +62,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
{ {
default: default:
case WatchSize.Byte: case WatchSize.Byte:
if (_settings.Mode == Settings.SearchMode.Detailed) if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{ {
for (int i = 0; i < domain.Size; i++) for (int i = 0; i < domain.Size; i++)
{ {
@ -79,7 +79,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
break; break;
case WatchSize.Word: 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) for (int i = 0; i < domain.Size - 1; i += _settings.CheckMisAligned ? 1 : 2)
{ {
@ -96,7 +96,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
break; break;
case WatchSize.DWord: 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) for (int i = 0; i < domain.Size - 3; i += _settings.CheckMisAligned ? 1 : 4)
{ {
@ -122,7 +122,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
{ {
get get
{ {
if (_settings.Mode == Settings.SearchMode.Detailed) if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{ {
return Watch.GenerateWatch( return Watch.GenerateWatch(
_settings.Domain, _settings.Domain,
@ -194,7 +194,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
public int Count => _watchList.Count; public int Count => _watchList.Count;
public Settings.SearchMode Mode => _settings.Mode; public SearchEngineSettings.SearchMode Mode => _settings.Mode;
public MemoryDomain Domain => _settings.Domain; public MemoryDomain Domain => _settings.Domain;
@ -225,7 +225,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
public void Update() public void Update()
{ {
if (_settings.Mode == Settings.SearchMode.Detailed) if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{ {
foreach (IMiniWatchDetails watch in _watchList) 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> /// <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) public void SetPreviousType(PreviousType type)
{ {
if (_settings.Mode == Settings.SearchMode.Fast) if (_settings.Mode == SearchEngineSettings.SearchMode.Fast)
{ {
if (type == PreviousType.LastFrame) if (type == PreviousType.LastFrame)
{ {
@ -265,7 +265,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
public void ClearChangeCounts() public void ClearChangeCounts()
{ {
if (_settings.Mode == Settings.SearchMode.Detailed) if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{ {
foreach (var watch in _watchList.Cast<IMiniWatchDetails>()) foreach (var watch in _watchList.Cast<IMiniWatchDetails>())
{ {
@ -311,7 +311,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
{ {
default: default:
case WatchSize.Byte: case WatchSize.Byte:
if (_settings.Mode == Settings.SearchMode.Detailed) if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{ {
foreach (var addr in addresses) foreach (var addr in addresses)
{ {
@ -328,7 +328,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
break; break;
case WatchSize.Word: case WatchSize.Word:
if (_settings.Mode == Settings.SearchMode.Detailed) if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{ {
foreach (var addr in addresses) foreach (var addr in addresses)
{ {
@ -345,7 +345,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
break; break;
case WatchSize.DWord: case WatchSize.DWord:
if (_settings.Mode == Settings.SearchMode.Detailed) if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{ {
foreach (var addr in addresses) foreach (var addr in addresses)
{ {
@ -394,7 +394,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
break; break;
case WatchList.CHANGES: case WatchList.CHANGES:
if (_settings.Mode == Settings.SearchMode.Detailed) if (_settings.Mode == SearchEngineSettings.SearchMode.Detailed)
{ {
if (reverse) if (reverse)
{ {
@ -611,7 +611,7 @@ namespace BizHawk.Client.Common.RamSearchEngine
private IEnumerable<IMiniWatch> CompareChanges(IEnumerable<IMiniWatch> watchList) 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; var compareValue = CompareValue.Value;
switch (Operator) switch (Operator)
@ -760,45 +760,12 @@ namespace BizHawk.Client.Common.RamSearchEngine
{ {
return _settings.Mode switch return _settings.Mode switch
{ {
Settings.SearchMode.Detailed => true, SearchEngineSettings.SearchMode.Detailed => true,
Settings.SearchMode.Fast => (compareType != Compare.Changes), SearchEngineSettings.SearchMode.Fast => (compareType != Compare.Changes),
_ => true _ => true
}; };
} }
#endregion #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 string _currentFileName = "";
private RamSearchEngine _searches; private RamSearchEngine _searches;
private RamSearchEngine.Settings _settings; private SearchEngineSettings _settings;
private int _defaultWidth; private int _defaultWidth;
private int _defaultHeight; private int _defaultHeight;
@ -122,7 +122,7 @@ namespace BizHawk.Client.EmuHawk
RamSearchMenu.Items.Add(WatchListView.ToColumnsMenu(ColumnToggleCallback)); RamSearchMenu.Items.Add(WatchListView.ToColumnsMenu(ColumnToggleCallback));
_settings = new RamSearchEngine.Settings(MemoryDomains); _settings = new SearchEngineSettings(MemoryDomains);
_searches = new RamSearchEngine(_settings, MemoryDomains); _searches = new RamSearchEngine(_settings, MemoryDomains);
ErrorIconButton.Visible = false; ErrorIconButton.Visible = false;
@ -150,7 +150,7 @@ namespace BizHawk.Client.EmuHawk
_dropdownDontfire = false; _dropdownDontfire = false;
if (_settings.Mode == RamSearchEngine.Settings.SearchMode.Fast) if (_settings.Mode == SearchEngineSettings.SearchMode.Fast)
{ {
SetToFastMode(); SetToFastMode();
} }
@ -312,7 +312,7 @@ namespace BizHawk.Client.EmuHawk
public void Restart() public void Restart()
{ {
_settings = new RamSearchEngine.Settings(MemoryDomains); _settings = new SearchEngineSettings(MemoryDomains);
_searches = new RamSearchEngine(_settings, MemoryDomains); _searches = new RamSearchEngine(_settings, MemoryDomains);
MessageLabel.Text = "Search restarted"; MessageLabel.Text = "Search restarted";
DoDomainSizeCheck(); DoDomainSizeCheck();
@ -606,9 +606,9 @@ namespace BizHawk.Client.EmuHawk
private void DoDomainSizeCheck() private void DoDomainSizeCheck()
{ {
if (_settings.Domain.Size >= MaxDetailedSize 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); SetReboot(true);
MessageLabel.Text = "Large domain, switching to fast mode"; MessageLabel.Text = "Large domain, switching to fast mode";
} }
@ -768,7 +768,7 @@ namespace BizHawk.Client.EmuHawk
private void SetToDetailedMode() private void SetToDetailedMode()
{ {
_settings.Mode = RamSearchEngine.Settings.SearchMode.Detailed; _settings.Mode = SearchEngineSettings.SearchMode.Detailed;
NumberOfChangesRadio.Enabled = true; NumberOfChangesRadio.Enabled = true;
NumberOfChangesBox.Enabled = true; NumberOfChangesBox.Enabled = true;
DifferenceRadio.Enabled = true; DifferenceRadio.Enabled = true;
@ -797,7 +797,7 @@ namespace BizHawk.Client.EmuHawk
private void SetToFastMode() private void SetToFastMode()
{ {
_settings.Mode = RamSearchEngine.Settings.SearchMode.Fast; _settings.Mode = SearchEngineSettings.SearchMode.Fast;
if (_settings.PreviousType == PreviousType.LastFrame || _settings.PreviousType == PreviousType.LastChange) 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) private void ModeSubMenu_DropDownOpened(object sender, EventArgs e)
{ {
DetailedMenuItem.Checked = _settings.Mode == RamSearchEngine.Settings.SearchMode.Detailed; DetailedMenuItem.Checked = _settings.Mode == SearchEngineSettings.SearchMode.Detailed;
FastMenuItem.Checked = _settings.Mode == RamSearchEngine.Settings.SearchMode.Fast; FastMenuItem.Checked = _settings.Mode == SearchEngineSettings.SearchMode.Fast;
} }
private void MemoryDomainsSubMenu_DropDownOpened(object sender, EventArgs e) private void MemoryDomainsSubMenu_DropDownOpened(object sender, EventArgs e)
@ -1152,8 +1152,8 @@ namespace BizHawk.Client.EmuHawk
break; break;
} }
PreviousFrameMenuItem.Enabled = _settings.Mode != RamSearchEngine.Settings.SearchMode.Fast; PreviousFrameMenuItem.Enabled = _settings.Mode != SearchEngineSettings.SearchMode.Fast;
Previous_LastChangeMenuItem.Enabled = _settings.Mode != RamSearchEngine.Settings.SearchMode.Fast; Previous_LastChangeMenuItem.Enabled = _settings.Mode != SearchEngineSettings.SearchMode.Fast;
} }
private void DetailedMenuItem_Click(object sender, EventArgs e) private void DetailedMenuItem_Click(object sender, EventArgs e)
@ -1219,7 +1219,7 @@ namespace BizHawk.Client.EmuHawk
private void SearchSubMenu_DropDownOpened(object sender, EventArgs e) 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 = RemoveMenuItem.Enabled =
AddToRamWatchMenuItem.Enabled = AddToRamWatchMenuItem.Enabled =
@ -1410,8 +1410,8 @@ namespace BizHawk.Client.EmuHawk
RamSearchMenu.Items.Add(WatchListView.ToColumnsMenu(ColumnToggleCallback)); RamSearchMenu.Items.Add(WatchListView.ToColumnsMenu(ColumnToggleCallback));
_settings = new RamSearchEngine.Settings(MemoryDomains); _settings = new SearchEngineSettings(MemoryDomains);
if (_settings.Mode == RamSearchEngine.Settings.SearchMode.Fast) if (_settings.Mode == SearchEngineSettings.SearchMode.Fast)
{ {
SetToFastMode(); SetToFastMode();
} }