public void ReadMultilineBuffered() { var Lines = new List <string>(); var Buffer = new char[128]; using (var Reader = new BinaryTextReader(_TestMultilineInput, Encoding.UTF8)) { while (!Reader.EndOfReader) { var Offset = 0; bool Success; do { Success = Reader.TryReadLine(Buffer.AsSpan(Offset, 4), out var CharsWritten); Offset += CharsWritten; }while (!Success); Lines.Add(Buffer.AsSpan(0, Offset).AsString()); } } // TODO: Will this fail on Linux? Maybe if the file is changed from CRLF Assert.AreEqual(_TestMultilineOutput, string.Join("\r\n", Lines)); }
public void BoolTest() { var btw = new BinaryTextWriter(); btw.AddBool(true); btw.AddBool(false); var btr = new BinaryTextReader(btw.GetOutputString()); Assert.IsTrue(btr.ReadBool()); Assert.IsFalse(btr.ReadBool()); }
public void ReadToEnd() { string MyResult; using (var Reader = new BinaryTextReader(_TestInput, Encoding.UTF8, false)) { MyResult = Reader.ReadToEnd(); } Assert.AreEqual(_TestOutput, MyResult); }
public void NumberTest() { var btw = new BinaryTextWriter(); btw.AddNumber(7, 4); btw.AddNumber(1, 10); var btr = new BinaryTextReader(btw.GetOutputString()); Assert.AreEqual(7, btr.ReadNumber(4)); Assert.AreEqual(1, btr.ReadNumber(10)); }
public void StringTest() { var btw = new BinaryTextWriter(); btw.AddString("TEST"); btw.AddString("1.2.3"); var btr = new BinaryTextReader(btw.GetOutputString()); Assert.AreEqual("TEST", btr.ReadString(4)); Assert.AreEqual("1.2.3", btr.ReadString(5)); }
public void ReadDetectEncodingUTF8() { string MyResult; using (var Reader = new BinaryTextReader(_TestInput, Encoding.ASCII, true)) { MyResult = Reader.ReadToEnd(); } Assert.AreEqual(_TestOutput, MyResult); }
public void ReadMultilineBufferedSkip() { var Buffer = new char[4]; using (var Reader = new BinaryTextReader(_TestMultilineInput, Encoding.UTF8, false, 4)) { while (!Reader.EndOfReader) { if (!Reader.TryReadLine(Buffer, out var CharsWritten)) { Reader.SkipLine(); } } } }
public void ReadMultiline() { var Lines = new List <string>(); using (var Reader = new BinaryTextReader(_TestMultilineInput, Encoding.UTF8)) { while (!Reader.EndOfReader) { Lines.Add(Reader.ReadLine()); } } // TODO: Will this fail on Linux? Maybe if the file is changed from CRLF Assert.AreEqual(_TestMultilineOutput, string.Join("\r\n", Lines)); }
// constructor public Settings_Old(string str = null) { if (string.IsNullOrEmpty(str)) { SetDefaults(); return; } BinaryTextReader btr; try { btr = new BinaryTextReader(str); } catch (FormatException) { throw new FormatException("Config string is not valid."); } // check version int configVer = btr.ReadNumber(10); if (configVer != version) { // convert settings SetDefaults(); switch (configVer) { case 100: LoadSettings100(btr); break; case 110: LoadSettings110(btr); break; default: throw new FormatException("Config string is not valid."); } } else { LoadSettings(btr); } }
public void ReadAndResetUTF8() { //**************************************** string MyResult1, MyResult2; //**************************************** using (var Reader = new BinaryTextReader(_TestInput, Encoding.ASCII, true)) { MyResult1 = Reader.ReadToEnd(); Reader.Reset(); MyResult2 = Reader.ReadToEnd(); } Assert.AreEqual(_TestOutput, MyResult1); Assert.AreEqual(_TestOutput, MyResult2); }
public void ReadASCII() { string MyResult; string TempOutput; using (var RawStream = new MemoryStream(_TestInput)) using (var Reader = new StreamReader(RawStream, Encoding.ASCII, false)) { TempOutput = Reader.ReadToEnd(); } using (var Reader = new BinaryTextReader(_TestInput, Encoding.ASCII, false)) { MyResult = Reader.ReadToEnd(); } Assert.AreEqual(TempOutput, MyResult); }
// constructor public Settings(string config = null) { SetDefaults(); if (string.IsNullOrEmpty(config)) { return; } BinaryTextReader btr; try { btr = new BinaryTextReader(config); } catch (FormatException) { throw new FormatException("Config string is not valid."); } // check version int major = btr.ReadNumber(4); int minor = btr.ReadNumber(4); int patch = btr.ReadNumber(4); string configVer = $"{major}.{minor}.{patch}"; // convert settings switch (configVer) { case "1.4.0": LoadSettings(btr); break; case "1.3.0": case "1.3.1": case "1.3.2": LoadSettings_1_3_2(btr); break; default: throw new FormatException("Config string is not valid."); } }
private void LoadSettings(BinaryTextReader btr) { // items randomAbilities = btr.ReadBool(); randomTanks = btr.ReadBool(); // excluded items excludedItems = new List <int>(); for (int i = 0; i < 100; i++) { bool excluded = btr.ReadBool(); if (excluded) { excludedItems.Add(i); } } gameCompletion = (GameCompletion)btr.ReadNumber(2); iceNotRequired = btr.ReadBool(); plasmaNotRequired = btr.ReadBool(); noPBsBeforeChozodia = btr.ReadBool(); chozoStatueHints = btr.ReadBool(); infiniteBombJump = btr.ReadBool(); wallJumping = btr.ReadBool(); // palettes tilesetPalettes = btr.ReadBool(); enemyPalettes = btr.ReadBool(); beamPalettes = btr.ReadBool(); hueMinimum = btr.ReadNumber(8); hueMaximum = btr.ReadNumber(8); // misc enableItemToggle = btr.ReadBool(); obtainUnkItems = btr.ReadBool(); hardModeAvailable = btr.ReadBool(); pauseScreenInfo = btr.ReadBool(); removeCutscenes = btr.ReadBool(); removeNorfairVine = btr.ReadBool(); removeVariaAnimation = btr.ReadBool(); skipSuitless = btr.ReadBool(); }
public void Read() { var MyResult = new StringBuilder(); using (var Reader = new BinaryTextReader(_TestInput, Encoding.UTF8, false)) { for (; ;) { var MyChar = Reader.Read(); if (MyChar == -1) { break; } MyResult.Append(char.ConvertFromUtf32(MyChar)); } } Assert.AreEqual(_TestOutput, MyResult.ToString()); }
public void ReadBlock([Values(8, 16, 32, 64, 128)] int capacity) { var MyResult = new StringBuilder(); var MyBuffer = new char[capacity]; using (var Reader = new BinaryTextReader(_TestInput, Encoding.UTF8, false)) { for (; ;) { var CharsRead = Reader.ReadBlock(MyBuffer, 0, capacity); if (CharsRead == 0) { break; } MyResult.Append(MyBuffer, 0, CharsRead); } } Assert.AreEqual(_TestOutput, MyResult.ToString()); }
public void ReadDetectEncodingUTF8NoBOM() { string MyResult; byte[] TempInput; using (var RawStream = new MemoryStream()) { using (var Writer = new StreamWriter(RawStream, new UTF8Encoding(false))) { Writer.Write(_TestOutput); } TempInput = RawStream.ToArray(); } using (var Reader = new BinaryTextReader(TempInput, Encoding.UTF8, true)) { MyResult = Reader.ReadToEnd(); } Assert.AreEqual(_TestOutput, MyResult); }
public void ReadDetectEncodingUnicode([Values(false, true)] bool bigEndian) { string MyResult; byte[] TempInput; using (var RawStream = new MemoryStream()) { using (var Writer = new StreamWriter(RawStream, new UnicodeEncoding(bigEndian, true))) { Writer.Write(_TestOutput); } TempInput = RawStream.ToArray(); } using (var Reader = new BinaryTextReader(TempInput, Encoding.ASCII, true)) { MyResult = Reader.ReadToEnd(); } Assert.AreEqual(_TestOutput, MyResult); }
private void LoadSettings_1_3_2(BinaryTextReader btr) { // items bool randAbilities = btr.ReadBool(); bool randTanks = btr.ReadBool(); if (randAbilities && randTanks) { AbilitySwap = Swap.GlobalPool; TankSwap = Swap.GlobalPool; } else if (randAbilities) { AbilitySwap = Swap.LocalPool; } else if (randTanks) { TankSwap = Swap.LocalPool; } if (btr.ReadBool()) { NumItemsRemoved = btr.ReadNumber(7); } if (SwapOrRemoveItems) { Completion = (GameCompletion)btr.ReadNumber(2); IceNotRequired = btr.ReadBool(); PlasmaNotRequired = btr.ReadBool(); NoPBsBeforeChozodia = btr.ReadBool(); ChozoStatueHints = btr.ReadBool(); InfiniteBombJump = btr.ReadBool(); WallJumping = btr.ReadBool(); } // locations if (btr.ReadBool()) { int count = btr.ReadNumber(7); for (int i = 0; i < count; i++) { int locNum = btr.ReadNumber(7); ItemType item = (ItemType)btr.ReadNumber(5); CustomAssignments[locNum] = item; } } // enemies RandoEnemies = btr.ReadBool(); // palettes TilesetPalettes = btr.ReadBool(); EnemyPalettes = btr.ReadBool(); BeamPalettes = btr.ReadBool(); if (RandomPalettes) { if (btr.ReadBool()) { HueMinimum = btr.ReadNumber(8); } if (btr.ReadBool()) { HueMaximum = btr.ReadNumber(8); } } // misc EnableItemToggle = btr.ReadBool(); ObtainUnkItems = btr.ReadBool(); HardModeAvailable = btr.ReadBool(); PauseScreenInfo = btr.ReadBool(); RemoveCutscenes = btr.ReadBool(); SkipSuitless = btr.ReadBool(); SkipDoorTransitions = btr.ReadBool(); }
private void LoadSettings(BinaryTextReader btr) { // items AbilitySwap = (Swap)btr.ReadNumber(2); TankSwap = (Swap)btr.ReadNumber(2); if (btr.ReadBool()) { NumItemsRemoved = btr.ReadNumber(7); if (btr.ReadBool()) { NumAbilitiesRemoved = btr.ReadNumber(4); } } if (SwapOrRemoveItems) { Completion = (GameCompletion)btr.ReadNumber(2); IceNotRequired = btr.ReadBool(); PlasmaNotRequired = btr.ReadBool(); NoPBsBeforeChozodia = btr.ReadBool(); ChozoStatueHints = btr.ReadBool(); InfiniteBombJump = btr.ReadBool(); WallJumping = btr.ReadBool(); } // locations if (btr.ReadBool()) { int count = btr.ReadNumber(7); for (int i = 0; i < count; i++) { int locNum = btr.ReadNumber(7); ItemType item = (ItemType)btr.ReadNumber(5); CustomAssignments[locNum] = item; } } // enemies RandoEnemies = btr.ReadBool(); // palettes TilesetPalettes = btr.ReadBool(); EnemyPalettes = btr.ReadBool(); SamusPalettes = btr.ReadBool(); BeamPalettes = btr.ReadBool(); if (RandomPalettes) { if (btr.ReadBool()) { HueMinimum = btr.ReadNumber(8); } if (btr.ReadBool()) { HueMaximum = btr.ReadNumber(8); } } // music MusicChange = (Change)btr.ReadNumber(2); if (MusicChange != Change.Unchanged) { MusicRooms = (Swap)btr.ReadNumber(2); MusicBosses = (Swap)btr.ReadNumber(2); MusicOthers = (Swap)btr.ReadNumber(2); } // misc EnableItemToggle = btr.ReadBool(); ObtainUnkItems = btr.ReadBool(); HardModeAvailable = btr.ReadBool(); PauseScreenInfo = btr.ReadBool(); RemoveCutscenes = btr.ReadBool(); SkipSuitless = btr.ReadBool(); SkipDoorTransitions = btr.ReadBool(); }
public void TempTest() { using var RawEventFile = File.Open(@"C:\Development\Resources\Zenith\Events 134.log", FileMode.Open); using var RawReader = new StreamBufferReader(RawEventFile); using var EventReader = new BinaryTextReader(RawReader); var EventBuffer = new char[128]; var TotalRecords = 0; var LastSequenceNumber = 1L; var TimeStamp = DateTimeOffset.MinValue; var IsStatus = false; while (!EventReader.EndOfReader) { var Offset = 0; // Decode the start of the next line into the buffer. It should be more than sufficiently large for the header if (!EventReader.TryReadLine(EventBuffer.AsSpan(Offset), out var CharsWritten)) { EventReader.SkipLine(); // We don't need the rest of the line data, no sense copying it } var Line = EventBuffer.AsSpan(0, CharsWritten); if (Line.IsEmpty) { continue; } // Find the first SequenceNumber:DateTimeUtc:Type:Data divider var Divider = Line.IndexOf(':'); if (Divider == -1) { continue; } // Process the sequence number if (!long.TryParse(Line.Slice(0, Divider), NumberStyles.None, CultureInfo.InvariantCulture, out var SequenceNumber)) { continue; } TotalRecords++; LastSequenceNumber = SequenceNumber; IsStatus = false; // Find the next divider (end of DateTimeUtc) var NextDivider = Line.Slice(++Divider).IndexOf(':'); if (NextDivider == -1) { continue; } if (!DateTimeOffset.TryParseExact(Line.Slice(Divider, NextDivider), "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture, DateTimeStyles.None, out var NewTimeStamp)) { continue; } TimeStamp = NewTimeStamp; Divider += NextDivider + 1; // Next divider (end of Type) NextDivider = Line.Slice(Divider).IndexOf(':'); var Type = Line.Slice(Divider, NextDivider); // Check if it's a Status event IsStatus = Type.SequenceEqual("Status"); } }