diff --git a/KaitaiStream.cs b/KaitaiStream.cs index 378c7ac..ea2b48f 100644 --- a/KaitaiStream.cs +++ b/KaitaiStream.cs @@ -16,7 +16,6 @@ namespace Kaitai public KaitaiStream(Stream stream) : base(stream) { - } /// @@ -24,7 +23,6 @@ namespace Kaitai /// public KaitaiStream(string file) : base(File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) { - } /// @@ -32,12 +30,13 @@ namespace Kaitai /// public KaitaiStream(byte[] bytes) : base(new MemoryStream(bytes)) { - } private ulong Bits = 0; private int BitsLeft = 0; + static readonly bool IsLittleEndian = BitConverter.IsLittleEndian; + #endregion #region Stream positioning @@ -68,7 +67,7 @@ namespace Kaitai } /// - /// Get the total length of the stream + /// Get the total length of the stream (ie. file size) /// public long Size { @@ -322,14 +321,7 @@ namespace Kaitai private static ulong GetMaskOnes(int n) { - if (n == 64) - { - return 0xffffffffffffffffUL; - } - else - { - return (1UL << n) - 1; - } + return n == 64 ? 0xffffffffffffffffUL : (1UL << n) - 1; } #endregion @@ -360,9 +352,8 @@ namespace Kaitai { if (count > Int32.MaxValue) throw new ArgumentOutOfRangeException("requested " + count + " bytes, while only non-negative int32 amount of bytes possible"); - int cnt = (int)count; - byte[] bytes = base.ReadBytes(cnt); - if (bytes.Length < cnt) + byte[] bytes = base.ReadBytes((int)count); + if (bytes.Length < (int)count) throw new EndOfStreamException("requested " + count + " bytes, but got only " + bytes.Length + " bytes"); return bytes; } @@ -375,7 +366,7 @@ namespace Kaitai protected byte[] ReadBytesNormalisedLittleEndian(int count) { byte[] bytes = ReadBytes(count); - if (!BitConverter.IsLittleEndian) Array.Reverse(bytes); + if (!IsLittleEndian) Array.Reverse(bytes); return bytes; } @@ -387,7 +378,7 @@ namespace Kaitai protected byte[] ReadBytesNormalisedBigEndian(int count) { byte[] bytes = ReadBytes(count); - if (BitConverter.IsLittleEndian) Array.Reverse(bytes); + if (IsLittleEndian) Array.Reverse(bytes); return bytes; } @@ -410,7 +401,7 @@ namespace Kaitai /// public byte[] ReadBytesTerm(byte terminator, bool includeTerminator, bool consumeTerminator, bool eosError) { - List bytes = new System.Collections.Generic.List(); + List bytes = new List(); while (true) { if (IsEof) @@ -439,26 +430,19 @@ namespace Kaitai public byte[] EnsureFixedContents(byte[] expected) { byte[] bytes = ReadBytes(expected.Length); - bool error = false; - if (bytes.Length == expected.Length) + + if (bytes.Length != expected.Length) { - for (int i = 0; i < bytes.Length; i++) + throw new Exception(string.Format("Expected bytes: {0} ({1} bytes), Instead got: {2} ({3} bytes)", Convert.ToBase64String(expected), expected.Length, Convert.ToBase64String(bytes), bytes.Length)); + } + for (int i = 0; i < bytes.Length; i++) + { + if (bytes[i] != expected[i]) { - if (bytes[i] != expected[i]) - { - error = true; - break; - } + throw new Exception(string.Format("Expected bytes: {0} ({1} bytes), Instead got: {2} ({3} bytes)", Convert.ToBase64String(expected), expected.Length, Convert.ToBase64String(bytes), bytes.Length)); } } - else - { - error = true; - } - if (error) - { - throw new Exception(string.Format("Expected bytes: {0}, Instead got: {1}", Convert.ToBase64String(expected), Convert.ToBase64String(bytes))); - } + return bytes; } @@ -644,8 +628,8 @@ namespace Kaitai { if (a == b) return 0; - int al = a.Count(); - int bl = b.Count(); + int al = a.Length; + int bl = b.Length; int minLen = al < bl ? al : bl; for (int i = 0; i < minLen; i++) { int cmp = a[i] - b[i];