diff --git a/BizHawk.Client.Common/tools/RamSearchEngine.cs b/BizHawk.Client.Common/tools/RamSearchEngine.cs index 945312ff44..8191349a66 100644 --- a/BizHawk.Client.Common/tools/RamSearchEngine.cs +++ b/BizHawk.Client.Common/tools/RamSearchEngine.cs @@ -352,7 +352,7 @@ namespace BizHawk.Client.Common _history.AddState(_watchList); } - var removeList = indices.Select(i => _watchList[i]); // This will fail after int.MaxValue but RAM Search fails on domains that large anyway + var removeList = indices.SelectAsIndexOf(_watchList); // This will fail after int.MaxValue but RAM Search fails on domains that large anyway _watchList = _watchList.Except(removeList).ToList(); } diff --git a/BizHawk.Client.EmuHawk/LogWindow.cs b/BizHawk.Client.EmuHawk/LogWindow.cs index af5d0d8968..59386f8982 100644 --- a/BizHawk.Client.EmuHawk/LogWindow.cs +++ b/BizHawk.Client.EmuHawk/LogWindow.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Drawing; using System.IO; +using System.Linq; using System.Text; using System.Windows.Forms; @@ -9,6 +10,7 @@ using BizHawk.Common.ReflectionExtensions; using BizHawk.Emulation.Common; using BizHawk.Emulation.Common.IEmulatorExtensions; using BizHawk.Client.Common; +using BizHawk.Common.CollectionExtensions; //todo - perks - pause, copy to clipboard, backlog length limiting @@ -112,8 +114,8 @@ namespace BizHawk.Client.EmuHawk private void buttonCopy_Click(object sender, EventArgs e) { var sb = new StringBuilder(); - foreach (int i in virtualListView1.SelectedIndices) - sb.AppendLine(Lines[i]); + foreach (var line in virtualListView1.SelectedIndices.Cast().SelectAsIndexOf(Lines)) + sb.AppendLine(line); if (sb.Length > 0) Clipboard.SetText(sb.ToString(), TextDataFormat.Text); } diff --git a/BizHawk.Client.EmuHawk/movie/PlayMovie.cs b/BizHawk.Client.EmuHawk/movie/PlayMovie.cs index 912cf8e440..6fe6cb6fed 100644 --- a/BizHawk.Client.EmuHawk/movie/PlayMovie.cs +++ b/BizHawk.Client.EmuHawk/movie/PlayMovie.cs @@ -10,6 +10,7 @@ using System.Windows.Forms; using BizHawk.Client.Common; using BizHawk.Common; using BizHawk.Client.EmuHawk.WinFormExtensions; +using BizHawk.Common.CollectionExtensions; namespace BizHawk.Client.EmuHawk { @@ -323,13 +324,13 @@ namespace BizHawk.Client.EmuHawk if (indexes.Count > 0) { var copyStr = new StringBuilder(); - foreach (int index in indexes) + foreach (var movie in indexes.Cast().SelectAsIndexOf(_movieList)) { copyStr - .Append(_movieList[index].Filename).Append('\t') - .Append(_movieList[index].SystemID).Append('\t') - .Append(_movieList[index].GameName).Append('\t') - .Append(PlatformFrameRates.MovieTime(_movieList[index]).ToString(@"hh\:mm\:ss\.fff")) + .Append(movie.Filename).Append('\t') + .Append(movie.SystemID).Append('\t') + .Append(movie.GameName).Append('\t') + .Append(PlatformFrameRates.MovieTime(movie).ToString(@"hh\:mm\:ss\.fff")) .AppendLine(); } Clipboard.SetDataObject(copyStr.ToString()); @@ -471,7 +472,7 @@ namespace BizHawk.Client.EmuHawk { MovieView.SelectedIndices .Cast() - .Select(index => _movieList[index]) + .SelectAsIndexOf(_movieList) .ToList() .ForEach(movie => System.Diagnostics.Process.Start(movie.Filename)); } diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs b/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs index 17428ebc77..27aefa1754 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs +++ b/BizHawk.Client.EmuHawk/tools/Debugger/BreakpointControl.cs @@ -7,6 +7,7 @@ using System.Windows.Forms; using BizHawk.Common.NumberExtensions; using BizHawk.Emulation.Common; using BizHawk.Client.EmuHawk.WinFormExtensions; +using BizHawk.Common.CollectionExtensions; namespace BizHawk.Client.EmuHawk { @@ -186,10 +187,7 @@ namespace BizHawk.Client.EmuHawk private IEnumerable SelectedIndices => BreakpointView.SelectedIndices.Cast(); - private IEnumerable SelectedItems - { - get { return SelectedIndices.Select(index => _breakpoints[index]); } - } + private IEnumerable SelectedItems => SelectedIndices.SelectAsIndexOf(_breakpoints); private IEnumerable EditableItems { diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs index fc60624ec6..cf5c326ce0 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs +++ b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs @@ -5,6 +5,8 @@ using System.Linq; using System.Text; using System.Windows.Forms; +using BizHawk.Common.CollectionExtensions; + namespace BizHawk.Client.EmuHawk { public partial class GenericDebugger @@ -199,16 +201,16 @@ namespace BizHawk.Client.EmuHawk if (indices.Count > 0) { var blob = new StringBuilder(); - foreach (int index in indices) + foreach (var disasmOp in indices.Cast().SelectAsIndexOf(_disassemblyLines)) { if (blob.Length != 0) { blob.AppendLine(); } - blob.Append(string.Format("{0:X" + _pcRegisterSize + "}", _disassemblyLines[index].Address)) + blob.Append(string.Format("{0:X" + _pcRegisterSize + "}", disasmOp.Address)) .Append(" ") - .Append(_disassemblyLines[index].Mnemonic); + .Append(disasmOp.Mnemonic); } Clipboard.SetDataObject(blob.ToString()); diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs index 4d386d6ca2..059d344244 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs @@ -11,6 +11,7 @@ using BizHawk.Client.Common; using BizHawk.Client.EmuHawk.ToolExtensions; using BizHawk.Client.EmuHawk.WinFormExtensions; using BizHawk.Common; +using BizHawk.Common.CollectionExtensions; using BizHawk.Emulation.Common; namespace BizHawk.Client.EmuHawk @@ -96,10 +97,7 @@ namespace BizHawk.Client.EmuHawk public bool UpdateBefore => true; - private IEnumerable SelectedItems - { - get { return LuaListView.SelectedIndices().Select(index => LuaImp.ScriptList[index]); } - } + private IEnumerable SelectedItems => LuaListView.SelectedIndices().SelectAsIndexOf(LuaImp.ScriptList); private IEnumerable SelectedFiles { diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.cs index f96d5a48fc..7181ff87c9 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.cs @@ -7,6 +7,7 @@ using System.Windows.Forms; using BizHawk.Client.Common; using BizHawk.Common; +using BizHawk.Common.CollectionExtensions; namespace BizHawk.Client.EmuHawk { @@ -191,9 +192,8 @@ namespace BizHawk.Client.EmuHawk { var sb = new StringBuilder(); - foreach (int index in indexes) + foreach (var libraryFunction in indexes.Cast().SelectAsIndexOf(GlobalWin.Tools.LuaConsole.LuaImp.Docs)) { - var libraryFunction = GlobalWin.Tools.LuaConsole.LuaImp.Docs[index]; sb.Append(libraryFunction.Library).Append('.').Append(libraryFunction.Name).Append("()\n"); } diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/MarkerControl.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/MarkerControl.cs index 535903c4e6..46f9341bf4 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/MarkerControl.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/MarkerControl.cs @@ -7,6 +7,7 @@ using System.Windows.Forms; using BizHawk.Client.Common; using BizHawk.Client.EmuHawk.WinFormExtensions; +using BizHawk.Common.CollectionExtensions; namespace BizHawk.Client.EmuHawk { @@ -269,16 +270,7 @@ namespace BizHawk.Client.EmuHawk MarkerInputRoll.AnyRowsSelected; } - private List SelectedMarkers - { - get - { - return MarkerView - .SelectedRows - .Select(index => Markers[index]) - .ToList(); - } - } + private List SelectedMarkers => MarkerView.SelectedRows.SelectAsIndexOf(Markers).ToList(); private void MarkerView_ItemActivate(object sender, EventArgs e) { diff --git a/BizHawk.Client.EmuHawk/tools/TraceLogger.cs b/BizHawk.Client.EmuHawk/tools/TraceLogger.cs index a4076555a3..7746f2a074 100644 --- a/BizHawk.Client.EmuHawk/tools/TraceLogger.cs +++ b/BizHawk.Client.EmuHawk/tools/TraceLogger.cs @@ -9,6 +9,7 @@ using System.Windows.Forms; using BizHawk.Emulation.Common; using BizHawk.Client.Common; using BizHawk.Client.EmuHawk.WinFormExtensions; +using BizHawk.Common.CollectionExtensions; namespace BizHawk.Client.EmuHawk { @@ -332,11 +333,11 @@ namespace BizHawk.Client.EmuHawk if (indices.Count > 0) { var blob = new StringBuilder(); - foreach (int index in indices) + foreach (var traceInfo in indices.Cast().SelectAsIndexOf(_instructions)) { blob.Append(string.Format("{0} {1}\n", - _instructions[index].Disassembly, - _instructions[index].RegisterInfo)); + traceInfo.Disassembly, + traceInfo.RegisterInfo)); } Clipboard.SetDataObject(blob.ToString()); } diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs b/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs index fc963f80e1..69e22ade62 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs @@ -13,6 +13,7 @@ using BizHawk.Emulation.Common.IEmulatorExtensions; using BizHawk.Client.Common; using BizHawk.Client.EmuHawk.WinFormExtensions; using BizHawk.Client.EmuHawk.ToolExtensions; +using BizHawk.Common.CollectionExtensions; namespace BizHawk.Client.EmuHawk { @@ -84,10 +85,7 @@ namespace BizHawk.Client.EmuHawk private IEnumerable SelectedIndices => WatchListView.SelectedIndices.Cast(); - private IEnumerable SelectedItems - { - get { return SelectedIndices.Select(index => _watches[index]); } - } + private IEnumerable SelectedItems => SelectedIndices.SelectAsIndexOf(_watches); private IEnumerable SelectedWatches { diff --git a/BizHawk.Client.MultiHawk/movie/PlayMovie.cs b/BizHawk.Client.MultiHawk/movie/PlayMovie.cs index 5c1d3464d2..dcc2f12f95 100644 --- a/BizHawk.Client.MultiHawk/movie/PlayMovie.cs +++ b/BizHawk.Client.MultiHawk/movie/PlayMovie.cs @@ -10,6 +10,8 @@ using System.Windows.Forms; using BizHawk.Client.Common; using BizHawk.Common; using BizHawk.Client.EmuHawk; +using BizHawk.Common.CollectionExtensions; + namespace BizHawk.Client.MultiHawk { public partial class PlayMovie : Form @@ -316,13 +318,13 @@ namespace BizHawk.Client.MultiHawk if (indexes.Count > 0) { var copyStr = new StringBuilder(); - foreach (int index in indexes) + foreach (var movie in indexes.Cast().SelectAsIndexOf(_movieList)) { copyStr - .Append(_movieList[index].Filename).Append('\t') - .Append(_movieList[index].SystemID).Append('\t') - .Append(_movieList[index].GameName).Append('\t') - .Append(PlatformFrameRates.MovieTime(_movieList[index]).ToString(@"hh\:mm\:ss\.fff")) + .Append(movie.Filename).Append('\t') + .Append(movie.SystemID).Append('\t') + .Append(movie.GameName).Append('\t') + .Append(PlatformFrameRates.MovieTime(movie).ToString(@"hh\:mm\:ss\.fff")) .AppendLine(); } Clipboard.SetDataObject(copyStr.ToString()); @@ -459,7 +461,7 @@ namespace BizHawk.Client.MultiHawk { MovieView.SelectedIndices .Cast() - .Select(index => _movieList[index]) + .SelectAsIndexOf(_movieList) .ToList() .ForEach(movie => System.Diagnostics.Process.Start(movie.Filename)); } diff --git a/BizHawk.Common/Extensions/CollectionExtensions.cs b/BizHawk.Common/Extensions/CollectionExtensions.cs index 7fb8fb3180..ecb20727bd 100644 --- a/BizHawk.Common/Extensions/CollectionExtensions.cs +++ b/BizHawk.Common/Extensions/CollectionExtensions.cs @@ -115,5 +115,7 @@ namespace BizHawk.Common.CollectionExtensions return bools; } + + public static IEnumerable SelectAsIndexOf(this IEnumerable indices, IList list) => indices.Select(i => list[i]); } }