From f256c164d1a7bf4d18fa4a7f6f6af5326472f8e5 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Thu, 28 Mar 2019 00:40:18 +1000 Subject: [PATCH] Replace concatenation and StringBuilder with string.Concat/string.Join --- BizHawk.Client.Common/movie/SubtitleList.cs | 23 +---- BizHawk.Client.Common/movie/bk2/Bk2Header.cs | 17 +--- .../movie/bk2/Bk2LogEntryGenerator.cs | 92 +++++-------------- .../movie/bk2/Bk2Movie.HeaderApi.cs | 12 +-- BizHawk.Client.Common/movie/bkm/BkmHeader.cs | 22 +---- .../movie/bkm/BkmLogEntryGenerator.cs | 55 ++++------- .../movie/tasproj/TasMovie.IO.cs | 13 +-- .../movie/tasproj/TasMovieMarker.cs | 11 +-- BizHawk.Client.Common/tools/CheatList.cs | 49 ++++------ .../tools/Watch/WatchList/WatchList.cs | 13 +-- BizHawk.Client.DBMan/DATTools/DATConverter.cs | 13 +-- BizHawk.Client.DBMan/DBMan_MainForm.cs | 10 +- BizHawk.Client.DBMan/RomHasher.cs | 10 +- .../Extensions/ControlExtensions.cs | 38 +------- BizHawk.Client.EmuHawk/LogWindow.cs | 14 +-- .../config/NES/NESSyncSettingsForm.cs | 8 +- BizHawk.Client.EmuHawk/movie/PlayMovie.cs | 23 ++--- .../tools/BasicBot/BasicBot.cs | 8 +- .../Debugger/GenericDebugger.Disassembler.cs | 23 +---- .../tools/HexEditor/HexFind.cs | 11 +-- .../Libraries/EmuLuaLibrary.Communication.cs | 15 +-- .../Lua/Libraries/EmuLuaLibrary.Console.cs | 12 +-- .../tools/Lua/LuaFunctionsForm.cs | 25 ++--- BizHawk.Client.EmuHawk/tools/TraceLogger.cs | 15 +-- .../tools/Watch/RamSearch.cs | 15 +-- .../tools/Watch/RamWatch.cs | 15 +-- BizHawk.Client.MultiHawk/movie/PlayMovie.cs | 23 ++--- BizHawk.Common/Extensions/BufferExtensions.cs | 12 +-- .../Consoles/Sega/gpgx64/GPGX.ITraceable.cs | 31 ++----- .../Consoles/Sony/PSX/Octoshock.ITraceable.cs | 17 +--- 30 files changed, 142 insertions(+), 503 deletions(-) diff --git a/BizHawk.Client.Common/movie/SubtitleList.cs b/BizHawk.Client.Common/movie/SubtitleList.cs index d878b37844..5d28cf1700 100644 --- a/BizHawk.Client.Common/movie/SubtitleList.cs +++ b/BizHawk.Client.Common/movie/SubtitleList.cs @@ -23,10 +23,8 @@ namespace BizHawk.Client.Common public override string ToString() { - var sb = new StringBuilder(); Sort(); - ForEach(subtitle => sb.AppendLine(subtitle.ToString())); - return sb.ToString(); + return string.Join("\n", this) + "\n"; } public bool AddFromString(string subtitleStr) @@ -37,13 +35,6 @@ namespace BizHawk.Client.Common { var subparts = subtitleStr.Split(' '); - // Unfortunately I made the file format space delminated so this hack is necessary to get the message - var message = ""; - for (var i = 6; i < subparts.Length; i++) - { - message += subparts[i] + ' '; - } - Add(new Subtitle { Frame = int.Parse(subparts[1]), @@ -51,7 +42,7 @@ namespace BizHawk.Client.Common Y = int.Parse(subparts[3]), Duration = int.Parse(subparts[4]), Color = uint.Parse(subparts[5], NumberStyles.HexNumber), - Message = message.Trim() + Message = string.Join(" ", subparts.Skip(6)) // Unfortunately this is necessary to get the value of Message because the format is space-delimited }); return true; @@ -76,8 +67,6 @@ namespace BizHawk.Client.Common public string ToSubRip(double fps) { - int index = 1; - var sb = new StringBuilder(); List subs = new List(); foreach (var subtitle in this) { @@ -117,12 +106,8 @@ namespace BizHawk.Client.Common subs = subs.OrderBy(s => s.Frame).ThenByDescending(s => s.Y).ToList(); } - foreach (var subtitle in subs) - { - sb.Append(subtitle.ToSubRip(index++, fps, AddColorTag)); - } - - return sb.ToString(); + var index = 1; + return string.Concat(subs.Select(subtitle => subtitle.ToSubRip(index++, fps, AddColorTag))); } } } \ No newline at end of file diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Header.cs b/BizHawk.Client.Common/movie/bk2/Bk2Header.cs index aac0a3463b..c3ed9601ce 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Header.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Header.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using System.Text; namespace BizHawk.Client.Common @@ -25,20 +26,6 @@ namespace BizHawk.Client.Common } } - public override string ToString() - { - var sb = new StringBuilder(); - - foreach (var kvp in this) - { - sb - .Append(kvp.Key) - .Append(' ') - .Append(kvp.Value) - .AppendLine(); - } - - return sb.ToString(); - } + public override string ToString() => string.Concat(this.Select((k, v) => $"{k} {v}\n")); } } diff --git a/BizHawk.Client.Common/movie/bk2/Bk2LogEntryGenerator.cs b/BizHawk.Client.Common/movie/bk2/Bk2LogEntryGenerator.cs index c9c1f2bb1f..a5d24e7ff3 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2LogEntryGenerator.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2LogEntryGenerator.cs @@ -46,21 +46,10 @@ namespace BizHawk.Client.Common public string GenerateLogKey() { - var sb = new StringBuilder(); - sb.Append("LogKey:"); - - foreach (var group in _source.Definition.ControlsOrdered.Where(c => c.Any())) - { - sb.Append("#"); - foreach (var button in group) - { - sb - .Append(button) - .Append('|'); - } - } - - return sb.ToString(); + var s = string.Join("#", _source.Definition.ControlsOrdered + .Select(group => string.Concat(group.Select(button => $"{button}|"))) + .Where(groupStr => !string.IsNullOrEmpty(groupStr))); + return $"LogKey:{(s.Length > 0 ? $"#{s}" : string.Empty)}"; } public Dictionary Map() @@ -86,64 +75,25 @@ namespace BizHawk.Client.Common private string CreateLogEntry(bool createEmpty = false, bool forInputDisplay = false) { - var sb = new StringBuilder(); - - if (!forInputDisplay) - { - sb.Append('|'); - } - - foreach (var group in _source.Definition.ControlsOrdered) - { - if (group.Any()) - { - foreach (var button in group) + var list = _source.Definition.ControlsOrdered.Select(group => string.Concat(group.Select( + button => { + if (_source.Definition.FloatControls.Contains(button)) { - if (_source.Definition.FloatControls.Contains(button)) - { - int val; - int i = _source.Definition.FloatControls.IndexOf(button); - int mid = (int)_source.Definition.FloatRanges[i].Mid; - - if (createEmpty) - { - val = mid; - } - else - { - val = (int)_source.GetFloat(button); - } - - if (forInputDisplay && val == mid) - { - sb.Append(" "); - } - else - { - sb.Append(val.ToString().PadLeft(5, ' ')).Append(','); - } - } - else if (_source.Definition.BoolButtons.Contains(button)) - { - if (createEmpty) - { - sb.Append('.'); - } - else - { - sb.Append(_source.IsPressed(button) ? _mnemonics[button] : forInputDisplay ? ' ' : '.'); - } - } + var mid = (int)_source.Definition.FloatRanges[_source.Definition.FloatControls.IndexOf(button)].Mid; + var val = createEmpty ? mid : (int)_source.GetFloat(button); + return forInputDisplay && val == mid ? " " : $"{val,5},"; } - - if (!forInputDisplay) - { - sb.Append('|'); - } - } - } - - return sb.ToString(); + else if (_source.Definition.BoolButtons.Contains(button)) + return (createEmpty + ? '.' + : _source.IsPressed(button) + ? _mnemonics[button] + : forInputDisplay + ? ' ' + : '.').ToString(); + else return string.Empty; + }))); + return forInputDisplay ? string.Concat(list) : $"|{string.Join("|", list)}|"; } } } diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs index e042e1bd39..3b687c7285 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs @@ -274,17 +274,7 @@ namespace BizHawk.Client.Common } } - protected string CommentsString() - { - var sb = new StringBuilder(); - - foreach (var comment in Comments) - { - sb.AppendLine(comment); - } - - return sb.ToString(); - } + protected string CommentsString() => string.Join("\n", Comments) + "\n"; public string TextSavestate { get; set; } public byte[] BinarySavestate { get; set; } diff --git a/BizHawk.Client.Common/movie/bkm/BkmHeader.cs b/BizHawk.Client.Common/movie/bkm/BkmHeader.cs index e33895a0e6..2988c12a19 100644 --- a/BizHawk.Client.Common/movie/bkm/BkmHeader.cs +++ b/BizHawk.Client.Common/movie/bkm/BkmHeader.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using System.Text; namespace BizHawk.Client.Common @@ -151,24 +152,9 @@ namespace BizHawk.Client.Common base.Clear(); } - public override string ToString() - { - var sb = new StringBuilder(); - - foreach (var kvp in this) - { - sb - .Append(kvp.Key) - .Append(' ') - .Append(kvp.Value) - .AppendLine(); - } - - sb.Append(Subtitles); - Comments.ForEach(comment => sb.AppendLine(comment)); - - return sb.ToString(); - } + public override string ToString() => string.Concat(this.Select((k, v) => $"{k} {v}\n")) + + Subtitles + + string.Join("\n", Comments) + "\n"; public bool ParseLineFromFile(string line) { diff --git a/BizHawk.Client.Common/movie/bkm/BkmLogEntryGenerator.cs b/BizHawk.Client.Common/movie/bkm/BkmLogEntryGenerator.cs index d444507047..65e71ad828 100644 --- a/BizHawk.Client.Common/movie/bkm/BkmLogEntryGenerator.cs +++ b/BizHawk.Client.Common/movie/bkm/BkmLogEntryGenerator.cs @@ -1,4 +1,5 @@ -using System.Text; +using System.Linq; +using System.Text; using BizHawk.Emulation.Common; @@ -345,45 +346,21 @@ namespace BizHawk.Client.Common return input.ToString(); } - private string GetDualGameBoyControllerAsMnemonic() - { - // |.|........|.|........| - var input = new StringBuilder(); + /// |.|........|.|........| + private string GetDualGameBoyControllerAsMnemonic() => string.Concat(BkmMnemonicConstants.DgbMnemonic.Select(t => + t.Item1 == null // true if separator + ? t.Item2 + : IsBasePressed(t.Item1) + ? t.Item2 + : '.')); - foreach (var t in BkmMnemonicConstants.DgbMnemonic) - { - if (t.Item1 != null) - { - input.Append(IsBasePressed(t.Item1) ? t.Item2 : '.'); - } - else - { - input.Append(t.Item2); // Separator - } - } - - return input.ToString(); - } - - private string GetWonderSwanControllerAsMnemonic() - { - // |....|....|...| - var input = new StringBuilder(); - - foreach (var t in BkmMnemonicConstants.WsMnemonic) - { - if (t.Item1 != null) - { - input.Append(IsBasePressed(t.Item1) ? t.Item2 : '.'); - } - else - { - input.Append(t.Item2); // Separator - } - } - - return input.ToString(); - } + /// |....|....|...| + private string GetWonderSwanControllerAsMnemonic() => string.Concat(BkmMnemonicConstants.WsMnemonic.Select(t => + t.Item1 == null // true if separator + ? t.Item2 + : IsBasePressed(t.Item1) + ? t.Item2 + : '.')); private string GetA78ControllersAsMnemonic() { diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs index d5d40edc19..6743354450 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs @@ -56,7 +56,7 @@ namespace BizHawk.Client.Common if (VerificationLog.Count > 0) { - bs.PutLump(BinaryStateLump.VerificationLog, tw => tw.WriteLine(InputLogToString(VerificationLog))); + bs.PutLump(BinaryStateLump.VerificationLog, tw => tw.WriteLine(string.Join("\n", VerificationLog) + "\n")); // double newline present with StringBuilder } if (Branches.Count > 0) @@ -276,16 +276,5 @@ namespace BizHawk.Client.Common Markers.Clear(); ChangeLog.ClearLog(); } - - private static string InputLogToString(IStringLog log) - { - var sb = new StringBuilder(); - foreach (var record in log) - { - sb.AppendLine(record); - } - - return sb.ToString(); - } } } diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovieMarker.cs b/BizHawk.Client.Common/movie/tasproj/TasMovieMarker.cs index f8310b06c5..c6c84b59dd 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovieMarker.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovieMarker.cs @@ -99,16 +99,7 @@ namespace BizHawk.Client.Common CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); } - public override string ToString() - { - var sb = new StringBuilder(); - foreach (var marker in this) - { - sb.AppendLine(marker.ToString()); - } - - return sb.ToString(); - } + public override string ToString() => string.Join("\n", this) + "\n"; // the inherited one public new void Add(TasMovieMarker item) diff --git a/BizHawk.Client.Common/tools/CheatList.cs b/BizHawk.Client.Common/tools/CheatList.cs index beb3761082..a5b7137ec3 100644 --- a/BizHawk.Client.Common/tools/CheatList.cs +++ b/BizHawk.Client.Common/tools/CheatList.cs @@ -370,38 +370,23 @@ namespace BizHawk.Client.Common file.Directory.Create(); } - using (var sw = new StreamWriter(path)) - { - var sb = new StringBuilder(); - - foreach (var cheat in _cheatList) - { - if (cheat.IsSeparator) - { - sb.AppendLine("----"); - } - else - { - // Set to hex for saving - cheat.SetType(DisplayType.Hex); - - sb - .Append(cheat.AddressStr).Append('\t') - .Append(cheat.ValueStr).Append('\t') - .Append(cheat.Compare?.ToString() ?? "N").Append('\t') - .Append(cheat.Domain != null ? cheat.Domain.Name : "").Append('\t') - .Append(cheat.Enabled ? '1' : '0').Append('\t') - .Append(cheat.Name).Append('\t') - .Append(cheat.SizeAsChar).Append('\t') - .Append(cheat.TypeAsChar).Append('\t') - .Append((cheat.BigEndian ?? false) ? '1' : '0').Append('\t') - .Append(cheat.ComparisonType).Append('\t') - .AppendLine(); - } - } - - sw.WriteLine(sb.ToString()); - } + using (var sw = new StreamWriter(path)) sw.WriteLine( + string.Join("\n", _cheatList.Select(cheat => { + if (cheat.IsSeparator) return "----"; + cheat.SetType(DisplayType.Hex); // ignore chosen format for saving + return string.Join("\t", + cheat.AddressStr, + cheat.ValueStr, + cheat.Compare?.ToString() ?? "N", + cheat.Domain != null ? cheat.Domain.Name : "", + cheat.Enabled ? '1' : '0', + cheat.Name, + cheat.SizeAsChar, + cheat.TypeAsChar, + cheat.BigEndian ?? false ? '1' : '0', + cheat.ComparisonType); + })) + + "\n"); // double newline present with StringBuilder _currentFileName = path; Global.Config.RecentCheats.Add(_currentFileName); diff --git a/BizHawk.Client.Common/tools/Watch/WatchList/WatchList.cs b/BizHawk.Client.Common/tools/Watch/WatchList/WatchList.cs index 0d5ee42d69..042972e047 100644 --- a/BizHawk.Client.Common/tools/Watch/WatchList/WatchList.cs +++ b/BizHawk.Client.Common/tools/Watch/WatchList/WatchList.cs @@ -457,18 +457,7 @@ namespace BizHawk.Client.Common } using (var sw = new StreamWriter(CurrentFileName)) - { - var sb = new StringBuilder(); - sb.Append("SystemID ").AppendLine(_systemid); - - foreach (var watch in _watchList) - { - sb.AppendLine(watch.ToString()); - } - - sw.WriteLine(sb.ToString()); - } - + sw.WriteLine($"SystemID {_systemid}\n{string.Join("\n", _watchList)}\n"); // double newline present with StringBuilder Changes = false; return true; } diff --git a/BizHawk.Client.DBMan/DATTools/DATConverter.cs b/BizHawk.Client.DBMan/DATTools/DATConverter.cs index bcf1cf67b1..ec15b85707 100644 --- a/BizHawk.Client.DBMan/DATTools/DATConverter.cs +++ b/BizHawk.Client.DBMan/DATTools/DATConverter.cs @@ -74,17 +74,8 @@ namespace BizHawk.Client.DBMan /// private void buttonRemove_Click(object sender, EventArgs e) { - List files = new List(); - foreach (var s in listBoxFiles.SelectedItems) - { - files.Add(s.ToString()); - } - - if (files.Count > 0) - { - foreach (var s in files) - listBoxFiles.Items.Remove(s); - } + foreach (var s in listBoxFiles.SelectedItems.Cast().Select(o => o.ToString())) + listBoxFiles.Items.Remove(s); } /// diff --git a/BizHawk.Client.DBMan/DBMan_MainForm.cs b/BizHawk.Client.DBMan/DBMan_MainForm.cs index c3dbd793b6..3f2614a3cb 100644 --- a/BizHawk.Client.DBMan/DBMan_MainForm.cs +++ b/BizHawk.Client.DBMan/DBMan_MainForm.cs @@ -317,13 +317,9 @@ namespace BizHawk.Client.DBMan if (rom.VersionTags != null) { - var versions = rom.VersionTags.Split(';'); - foreach (var version in versions) - { - if (version.Trim().Length == 0) - continue; - romName += " (" + version + ")"; - } + romName += string.Concat(rom.VersionTags.Split(';') + .Where(version => !string.IsNullOrWhiteSpace(version)) + .Select(version => $" ({version.Trim()})")); } tw.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}", rom.MD5, romCode, romName, rom.System, rom.Game.Tags, rom.CombinedMetaData, rom.Region); diff --git a/BizHawk.Client.DBMan/RomHasher.cs b/BizHawk.Client.DBMan/RomHasher.cs index 8a8be1393a..ebcc23f5f0 100644 --- a/BizHawk.Client.DBMan/RomHasher.cs +++ b/BizHawk.Client.DBMan/RomHasher.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text; using BizHawk.Emulation.Common; using BizHawk.Emulation.DiscSystem; @@ -213,14 +214,7 @@ namespace BizHawk.Client.DBMan } } - static string BytesToHexString(byte[] bytes) - { - var sb = new StringBuilder(); - foreach (var b in bytes) - sb.AppendFormat("{0:X2}", b); - - return sb.ToString(); - } + static string BytesToHexString(byte[] bytes) => string.Concat(bytes.Select(b => $"{b:X2}")); static byte[] MaybeStripHeader512(byte[] fileBytes) { diff --git a/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs b/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs index f03313113b..133af6fceb 100644 --- a/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs +++ b/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs @@ -236,39 +236,11 @@ namespace BizHawk.Client.EmuHawk.WinFormExtensions /// /// Dumps the contents of the ListView into a tab separated list of lines /// - public static string CopyItemsAsText(this ListView listViewControl) - { - var indexes = listViewControl.SelectedIndices; - if (indexes.Count <= 0) - { - return ""; - } - - var sb = new StringBuilder(); - - // walk over each selected item and subitem within it to generate a string from it - foreach (int index in indexes) - { - foreach (ListViewItem.ListViewSubItem item in listViewControl.Items[index].SubItems) - { - if (!String.IsNullOrWhiteSpace(item.Text)) - { - sb.Append(item.Text).Append('\t'); - } - } - - // remove the last tab - sb.Remove(sb.Length - 1, 1); - - sb.Append("\r\n"); - } - - // remove last newline - sb.Length -= 2; - - - return sb.ToString(); - } + public static string CopyItemsAsText(this ListView listViewControl) => + string.Join("\r\n", listViewControl.SelectedIndices.Cast() + .Select(index => string.Join("\t", listViewControl.Items[index].SubItems.Cast() + .Select(subItem => subItem.Text) + .Where(subItemText => !string.IsNullOrWhiteSpace(subItemText))))); public static void SetSortIcon(this ListView listViewControl, int columnIndex, SortOrder order) { diff --git a/BizHawk.Client.EmuHawk/LogWindow.cs b/BizHawk.Client.EmuHawk/LogWindow.cs index 59386f8982..127e7f3236 100644 --- a/BizHawk.Client.EmuHawk/LogWindow.cs +++ b/BizHawk.Client.EmuHawk/LogWindow.cs @@ -113,20 +113,14 @@ namespace BizHawk.Client.EmuHawk private void buttonCopy_Click(object sender, EventArgs e) { - var sb = new StringBuilder(); - foreach (var line in virtualListView1.SelectedIndices.Cast().SelectAsIndexOf(Lines)) - sb.AppendLine(line); - if (sb.Length > 0) - Clipboard.SetText(sb.ToString(), TextDataFormat.Text); + var s = string.Join("\n", virtualListView1.SelectedIndices.Cast().SelectAsIndexOf(Lines)); + if (s.Length > 0) Clipboard.SetText($"{s}\n", TextDataFormat.Text); } private void buttonCopyAll_Click(object sender, EventArgs e) { - var sb = new StringBuilder(); - foreach (var s in Lines) - sb.AppendLine(s); - if (sb.Length > 0) - Clipboard.SetText(sb.ToString(), TextDataFormat.Text); + var s = string.Join("\n", Lines); + if (s.Length > 0) Clipboard.SetText($"{s}\n", TextDataFormat.Text); } private void virtualListView1_KeyDown(object sender, KeyEventArgs e) diff --git a/BizHawk.Client.EmuHawk/config/NES/NESSyncSettingsForm.cs b/BizHawk.Client.EmuHawk/config/NES/NESSyncSettingsForm.cs index cc14be63fc..33d49f4151 100644 --- a/BizHawk.Client.EmuHawk/config/NES/NESSyncSettingsForm.cs +++ b/BizHawk.Client.EmuHawk/config/NES/NESSyncSettingsForm.cs @@ -40,13 +40,7 @@ namespace BizHawk.Client.EmuHawk if (_syncSettings.InitialWRamStatePattern != null && _syncSettings.InitialWRamStatePattern.Count > 0) { - var sb = new StringBuilder(); - foreach (var b in _syncSettings.InitialWRamStatePattern) - { - sb.Append(b.ToHexString(2)); - } - - RamPatternOverrideBox.Text = sb.ToString(); + RamPatternOverrideBox.Text = string.Concat(_syncSettings.InitialWRamStatePattern.Select(b => b.ToHexString(2))); } } diff --git a/BizHawk.Client.EmuHawk/movie/PlayMovie.cs b/BizHawk.Client.EmuHawk/movie/PlayMovie.cs index 6dbd2db07f..0bdab6aac3 100644 --- a/BizHawk.Client.EmuHawk/movie/PlayMovie.cs +++ b/BizHawk.Client.EmuHawk/movie/PlayMovie.cs @@ -316,21 +316,14 @@ namespace BizHawk.Client.EmuHawk { if (e.Control && e.KeyCode == Keys.C) { - var indexes = MovieView.SelectedIndices; - if (indexes.Count > 0) - { - var copyStr = new StringBuilder(); - foreach (var movie in indexes.Cast().SelectAsIndexOf(_movieList)) - { - copyStr - .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()); - } + var s = string.Join("\n", MovieView.SelectedIndices.Cast() + .SelectAsIndexOf(_movieList) + .Select(movie => string.Join("\t", + movie.Filename, + movie.SystemID, + movie.GameName, + PlatformFrameRates.MovieTime(movie).ToString(@"hh\:mm\:ss\.fff")))); + if (s.Length > 0) Clipboard.SetDataObject($"{s}\n"); } } diff --git a/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs b/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs index 8048967d84..97c4fa9e1c 100644 --- a/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs +++ b/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs @@ -1012,13 +1012,7 @@ namespace BizHawk.Client.EmuHawk BestTieBreak1Box.Text = _bestBotAttempt.TieBreak1.ToString(); BestTieBreak2Box.Text = _bestBotAttempt.TieBreak2.ToString(); BestTieBreak3Box.Text = _bestBotAttempt.TieBreak3.ToString(); - - var sb = new StringBuilder(); - foreach (var logEntry in _bestBotAttempt.Log) - { - sb.AppendLine(logEntry); - } - BestAttemptLogLabel.Text = sb.ToString(); + BestAttemptLogLabel.Text = string.Join("\n", _bestBotAttempt.Log) + "\n"; PlayBestButton.Enabled = true; } else diff --git a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs index 669b5fc519..8a443325fb 100644 --- a/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs +++ b/BizHawk.Client.EmuHawk/tools/Debugger/GenericDebugger.Disassembler.cs @@ -196,25 +196,10 @@ namespace BizHawk.Client.EmuHawk private void CopySelectedDisassembler() { - var indices = DisassemblerView.SelectedIndices; - - if (indices.Count > 0) - { - var blob = new StringBuilder(); - foreach (var disasmOp in indices.Cast().SelectAsIndexOf(_disassemblyLines)) - { - if (blob.Length != 0) - { - blob.AppendLine(); - } - - blob.Append(string.Format("{0:X" + _pcRegisterSize + "}", disasmOp.Address)) - .Append(" ") - .Append(disasmOp.Mnemonic); - } - - Clipboard.SetDataObject(blob.ToString()); - } + var s = string.Join("\n", DisassemblerView.SelectedIndices.Cast() + .SelectAsIndexOf(_disassemblyLines) + .Select(d => $"{string.Format($"{{0:X{_pcRegisterSize}}}", d.Address)} {d.Mnemonic}")); + if (s.Length > 0) Clipboard.SetDataObject(s); } private void OnPauseChanged(object sender, MainForm.PauseChangedEventArgs e) diff --git a/BizHawk.Client.EmuHawk/tools/HexEditor/HexFind.cs b/BizHawk.Client.EmuHawk/tools/HexEditor/HexFind.cs index 8bfd208351..f8e8f2bf5a 100644 --- a/BizHawk.Client.EmuHawk/tools/HexEditor/HexFind.cs +++ b/BizHawk.Client.EmuHawk/tools/HexEditor/HexFind.cs @@ -1,5 +1,6 @@ using System; using System.Drawing; +using System.Linq; using System.Text; using System.Windows.Forms; @@ -55,15 +56,7 @@ namespace BizHawk.Client.EmuHawk return FindBox.Text; } - var bytes = GlobalWin.Tools.HexEditor.ConvertTextToBytes(FindBox.Text); - - var bytestring = new StringBuilder(); - foreach (var b in bytes) - { - bytestring.Append($"{b:X2}"); - } - - return bytestring.ToString(); + return string.Concat(GlobalWin.Tools.HexEditor.ConvertTextToBytes(FindBox.Text).Select(b => $"{b:X2}")); } private void Find_Prev_Click(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Communication.cs b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Communication.cs index fdae9f132d..dff63d46c7 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Communication.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Communication.cs @@ -6,6 +6,7 @@ using BizHawk.Client.Common; using System.Text; using System.Collections.Generic; using System.Net.Http; +using System.Reflection; using System.Windows.Forms; @@ -28,18 +29,10 @@ namespace BizHawk.Client.EmuHawk public override string Name => "comm"; - //TO DO: not fully working yet! + //TODO: not fully working yet! [LuaMethod("getluafunctionslist", "returns a list of implemented functions")] - public static string GetLuaFunctionsList() - { - var list = new StringBuilder(); - foreach (var function in typeof(CommunicationLuaLibrary).GetMethods()) - { - list.AppendLine(function.ToString()); - } - - return list.ToString(); - } + public static string GetLuaFunctionsList() => + string.Join("\n", (IEnumerable) typeof(CommunicationLuaLibrary).GetMethods()) + "\n"; [LuaMethod("socketServerScreenShot", "sends a screenshot to the Socket server")] public string SocketServerScreenShot() diff --git a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Console.cs b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Console.cs index 1de6979c92..46cdae1eac 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Console.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Console.cs @@ -30,16 +30,8 @@ namespace BizHawk.Client.EmuHawk [LuaMethodExample("local stconget = console.getluafunctionslist( );")] [LuaMethod("getluafunctionslist", "returns a list of implemented functions")] - public static string GetLuaFunctionsList() - { - var list = new StringBuilder(); - foreach (var function in GlobalWin.Tools.LuaConsole.LuaImp.Docs) - { - list.AppendLine(function.Name); - } - - return list.ToString(); - } + public static string GetLuaFunctionsList() => + string.Join("\n", GlobalWin.Tools.LuaConsole.LuaImp.Docs.Select(function => function.Name)) + "\n"; [LuaMethodExample("console.log( \"New log.\" );")] [LuaMethod("log", "Outputs the given object to the output box on the Lua Console dialog. Note: Can accept a LuaTable")] diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.cs index 4c353a2c23..c42528b95d 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaFunctionsForm.cs @@ -155,26 +155,13 @@ namespace BizHawk.Client.EmuHawk private void FunctionView_KeyDown(object sender, KeyEventArgs e) { - if (e.KeyCode == Keys.C && e.Control && !e.Alt && !e.Shift) // Copy + if (e.KeyCode == Keys.C && e.Control && !e.Alt && !e.Shift // Copy + && FunctionView.SelectedIndices.Count > 0) { - var indexes = FunctionView.SelectedIndices; - - //TODO - duplicated code with FunctionView_Copy - //also -- this list is more compact (the examples would fill space) - //it isn't clear whether we should copy the examples here. So maybe this should stay distinct (and more compact?) - - if (indexes.Count > 0) - { - var sb = new StringBuilder(); - - foreach (var libraryFunction in indexes.Cast().SelectAsIndexOf(GlobalWin.Tools.LuaConsole.LuaImp.Docs)) - { - sb.Append(libraryFunction.Library).Append('.').Append(libraryFunction.Name).Append("()\n"); - } - - if (sb.Length > 0) - Clipboard.SetDataObject(sb.ToString()); - } + var s = string.Concat(FunctionView.SelectedIndices.Cast() + .SelectAsIndexOf(GlobalWin.Tools.LuaConsole.LuaImp.Docs) + .Select(lf => $"{lf.Library}.{lf.Name}()\n")); + if (s.Length > 0) Clipboard.SetDataObject(s); } } diff --git a/BizHawk.Client.EmuHawk/tools/TraceLogger.cs b/BizHawk.Client.EmuHawk/tools/TraceLogger.cs index 7746f2a074..e41fa9c691 100644 --- a/BizHawk.Client.EmuHawk/tools/TraceLogger.cs +++ b/BizHawk.Client.EmuHawk/tools/TraceLogger.cs @@ -328,18 +328,11 @@ namespace BizHawk.Client.EmuHawk private void CopyMenuItem_Click(object sender, EventArgs e) { - var indices = TraceView.SelectedIndices; - - if (indices.Count > 0) + if (TraceView.SelectedIndices.Count > 0) { - var blob = new StringBuilder(); - foreach (var traceInfo in indices.Cast().SelectAsIndexOf(_instructions)) - { - blob.Append(string.Format("{0} {1}\n", - traceInfo.Disassembly, - traceInfo.RegisterInfo)); - } - Clipboard.SetDataObject(blob.ToString()); + Clipboard.SetDataObject(string.Concat(TraceView.SelectedIndices.Cast() + .SelectAsIndexOf(_instructions) + .Select(instr => $"{instr.Disassembly} {instr.RegisterInfo}\n"))); } } diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs b/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs index 362e55d277..32b8b6004c 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamSearch.cs @@ -1519,19 +1519,8 @@ namespace BizHawk.Client.EmuHawk private void CopyWatchesToClipBoard() { - if (SelectedItems.Any()) - { - var sb = new StringBuilder(); - foreach (var watch in SelectedItems) - { - sb.AppendLine(watch.ToString()); - } - - if (sb.Length > 0) - { - Clipboard.SetDataObject(sb.ToString()); - } - } + var s = string.Join("\n", SelectedItems); + if (s.Length > 0) Clipboard.SetDataObject($"{s}\n"); } #endregion diff --git a/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs b/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs index 01acfe9cef..28f9b40495 100644 --- a/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs +++ b/BizHawk.Client.EmuHawk/tools/Watch/RamWatch.cs @@ -347,19 +347,8 @@ namespace BizHawk.Client.EmuHawk private void CopyWatchesToClipBoard() { - if (SelectedItems.Any()) - { - var sb = new StringBuilder(); - foreach (var watch in SelectedItems) - { - sb.AppendLine(watch.ToString()); - } - - if (sb.Length > 0) - { - Clipboard.SetDataObject(sb.ToString()); - } - } + var s = string.Join("\n", SelectedItems); + if (s.Length > 0) Clipboard.SetDataObject($"{s}\n"); } private void PasteWatchesToClipBoard() diff --git a/BizHawk.Client.MultiHawk/movie/PlayMovie.cs b/BizHawk.Client.MultiHawk/movie/PlayMovie.cs index 746ad67756..788183f5ea 100644 --- a/BizHawk.Client.MultiHawk/movie/PlayMovie.cs +++ b/BizHawk.Client.MultiHawk/movie/PlayMovie.cs @@ -310,21 +310,14 @@ namespace BizHawk.Client.MultiHawk { if (e.Control && e.KeyCode == Keys.C) { - var indexes = MovieView.SelectedIndices; - if (indexes.Count > 0) - { - var copyStr = new StringBuilder(); - foreach (var movie in indexes.Cast().SelectAsIndexOf(_movieList)) - { - copyStr - .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()); - } + var s = string.Join("\n", MovieView.SelectedIndices.Cast() + .SelectAsIndexOf(_movieList) + .Select(movie => string.Join("\t", + movie.Filename, + movie.SystemID, + movie.GameName, + PlatformFrameRates.MovieTime(movie).ToString(@"hh\:mm\:ss\.fff")))); + if (s.Length > 0) Clipboard.SetDataObject($"{s}\n"); } } diff --git a/BizHawk.Common/Extensions/BufferExtensions.cs b/BizHawk.Common/Extensions/BufferExtensions.cs index e04788f445..6c50c681d7 100644 --- a/BizHawk.Common/Extensions/BufferExtensions.cs +++ b/BizHawk.Common/Extensions/BufferExtensions.cs @@ -1,6 +1,7 @@ using System; using System.Globalization; using System.IO; +using System.Linq; using System.Text; using System.Security.Cryptography; @@ -172,16 +173,7 @@ namespace BizHawk.Common.BufferExtensions /// /// Converts bytes to an uppercase string of hex numbers in upper case without any spacing or anything /// - public static string BytesToHexString(this byte[] bytes) - { - var sb = new StringBuilder(); - foreach (var b in bytes) - { - sb.AppendFormat("{0:X2}", b); - } - - return sb.ToString(); - } + public static string BytesToHexString(this byte[] bytes) => string.Concat(bytes.Select(b => $"{b:X2}")); public static bool FindBytes(this byte[] array, byte[] pattern) { diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs index c8d8dab662..086a4cf2d9 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs @@ -1,6 +1,7 @@ using BizHawk.Emulation.Common; using System; using System.Collections.Generic; +using System.Linq; using System.Text; using BizHawk.Common.NumberExtensions; @@ -31,33 +32,19 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx Disassembly = string.Format("{0:X6}: {1}", pc, disasm).PadRight(50) }; - var sb = new StringBuilder(); - - foreach (var r in regs) - { - if (r.Key.StartsWith("M68K")) // drop Z80 regs until it has its own debugger/tracer - { - if (r.Key != "M68K SP" && r.Key != "M68K ISP" && // copies of a7 - r.Key != "M68K PC" && // already present in every line start - r.Key != "M68K IR") // copy of last opcode, already shown in raw bytes - { - sb.Append( - string.Format("{0}:{1} ", - r.Key.Replace("M68K", "").Trim(), - r.Value.Value.ToHexString(r.Value.BitSize / 4))); - } - } - } + var regStr = string.Concat(regs.Where(r => r.Key.StartsWith("M68K") // drop Z80 regs until it has its own debugger/tracer + && r.Key != "M68K SP" && r.Key != "M68K ISP" // copies of a7 + && r.Key != "M68K PC" // already present in every line start + && r.Key != "M68K IR") // copy of last opcode, already shown in raw bytes + .Select(r => $"{r.Key.Replace("M68K", "").Trim()}:{r.Value.Value.ToHexString(r.Value.BitSize / 4)} ")); var sr = regs["M68K SR"].Value; - sb.Append( - string.Format("{0}{1}{2}{3}{4}", + + traceInfo.RegisterInfo = regStr + string.Concat( (sr & 16) > 0 ? "X" : "x", (sr & 8) > 0 ? "N" : "n", (sr & 4) > 0 ? "Z" : "z", (sr & 2) > 0 ? "V" : "v", - (sr & 1) > 0 ? "C" : "c")); - - traceInfo.RegisterInfo = sb.ToString().Trim(); + (sr & 1) > 0 ? "C" : "c"); Put(traceInfo); } diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.ITraceable.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.ITraceable.cs index 00d0fc8e26..f0b3a3a567 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.ITraceable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.ITraceable.cs @@ -18,22 +18,11 @@ namespace BizHawk.Emulation.Cores.Sony.PSX public void ShockTraceCallback(IntPtr opaque, uint PC, uint inst, string dis) { - var regs = GetCpuFlagsAndRegisters(); - StringBuilder sb = new StringBuilder(); - - foreach (var r in regs) - { - if (r.Key != "pc") - sb.Append( - string.Format("{0}:{1} ", - r.Key, - r.Value.Value.ToHexString(r.Value.BitSize / 4))); - } - Tracer.Put(new TraceInfo { - Disassembly = string.Format("{0:X8}: {1:X8} {2}", PC, inst, dis.PadRight(30)), - RegisterInfo = sb.ToString().Trim() + Disassembly = $"{PC:X8}: {inst:X8} {dis.PadRight(30)}", + RegisterInfo = string.Join(" ", GetCpuFlagsAndRegisters().Where(r => r.Key != "pc") + .Select(r => $"{r.Key}:{r.Value.Value.ToHexString(r.Value.BitSize / 4)}")) }); }