From f2fd5426eb5fdd3058d47dda4aae27fdc4d9fef7 Mon Sep 17 00:00:00 2001 From: alcexhim Date: Mon, 1 Dec 2014 13:54:42 -0500 Subject: [PATCH] Refactored common Reader/Writer functionality into separate ReaderWriterBase class --- .../UniversalEditor.Core/IO/Reader.cs | 215 ++++++++---------- .../IO/ReaderWriterBase.cs | 69 ++++++ .../UniversalEditor.Core/IO/Writer.cs | 107 +++------ .../UniversalEditor.Core.csproj | 1 + 4 files changed, 189 insertions(+), 203 deletions(-) create mode 100644 CSharp/Libraries/UniversalEditor.Core/IO/ReaderWriterBase.cs diff --git a/CSharp/Libraries/UniversalEditor.Core/IO/Reader.cs b/CSharp/Libraries/UniversalEditor.Core/IO/Reader.cs index 3a4b15ef..a854d554 100644 --- a/CSharp/Libraries/UniversalEditor.Core/IO/Reader.cs +++ b/CSharp/Libraries/UniversalEditor.Core/IO/Reader.cs @@ -23,53 +23,16 @@ using System.Diagnostics; namespace UniversalEditor.IO { // [DebuggerNonUserCode()] - public class Reader + public class Reader : ReaderWriterBase { - private Endianness mvarEndianness = Endianness.LittleEndian; - public Endianness Endianness { get { return mvarEndianness; } set { mvarEndianness = value; } } - - private bool mvarReverse = false; - public bool Reverse { get { return mvarReverse; } } - - private Accessor mvarAccessor = null; - public Accessor Accessor { get { return mvarAccessor; } } - - private NewLineSequence mvarNewLineSequence = NewLineSequence.Default; - public NewLineSequence NewLineSequence { get { return mvarNewLineSequence; } set { mvarNewLineSequence = value; } } - public string GetNewLineSequence() - { - string newline = System.Environment.NewLine; - switch (mvarNewLineSequence) - { - case IO.NewLineSequence.CarriageReturn: - { - newline = "\r"; - break; - } - case IO.NewLineSequence.LineFeed: - { - newline = "\n"; - break; - } - case IO.NewLineSequence.CarriageReturnLineFeed: - { - newline = "\r\n"; - break; - } - } - return newline; - } - public Reader(Accessor input) + : base(input) { - this.mvarAccessor = input; - this.mvarEndianness = Endianness.LittleEndian; - this.mvarReverse = false; } public void Read(byte[] buffer, int start, int length) { - mvarAccessor.ReadInternal(buffer, start, length); + base.Accessor.ReadInternal(buffer, start, length); } public bool ReadBoolean() @@ -89,16 +52,16 @@ namespace UniversalEditor.IO { if (charBuffer == null) { - int maxByteCount = mvarAccessor.DefaultEncoding.GetMaxByteCount(1); + int maxByteCount = base.Accessor.DefaultEncoding.GetMaxByteCount(1); byte[] bytes = PeekBytes(maxByteCount); - charBuffer = mvarAccessor.DefaultEncoding.GetString(bytes); + charBuffer = base.Accessor.DefaultEncoding.GetString(bytes); charBufferIndex = 0; } char c = charBuffer[charBufferIndex]; charBufferIndex++; - int ct = mvarAccessor.DefaultEncoding.GetByteCount(c); + int ct = base.Accessor.DefaultEncoding.GetByteCount(c); Seek(ct, SeekOrigin.Current); if (charBufferIndex + 1 > charBuffer.Length) @@ -110,14 +73,14 @@ namespace UniversalEditor.IO public byte PeekByte() { byte b = ReadByte(); - mvarAccessor.Seek(-1, SeekOrigin.Current); + base.Accessor.Seek(-1, SeekOrigin.Current); return b; } public byte[] PeekBytes(int length) { byte[] buffer = new byte[length]; - int len = mvarAccessor.ReadInternal(buffer, 0, length); - mvarAccessor.Seek(-len, SeekOrigin.Current); + int len = base.Accessor.ReadInternal(buffer, 0, length); + base.Accessor.Seek(-len, SeekOrigin.Current); return buffer; } public char PeekChar() @@ -158,7 +121,7 @@ namespace UniversalEditor.IO public byte[] ReadBytes(long length) { byte[] buffer = new byte[length]; - mvarAccessor.ReadInternal(buffer, 0, (int)length); + base.Accessor.ReadInternal(buffer, 0, (int)length); return buffer; } @@ -250,17 +213,17 @@ namespace UniversalEditor.IO public string ReadFixedLengthString(byte length) { - return this.ReadFixedLengthString(length, mvarAccessor.DefaultEncoding); + return this.ReadFixedLengthString(length, base.Accessor.DefaultEncoding); } public string ReadFixedLengthString(int length) { - return ReadFixedLengthString(length, mvarAccessor.DefaultEncoding); + return ReadFixedLengthString(length, base.Accessor.DefaultEncoding); } public string ReadFixedLengthString(uint length) { - return this.ReadFixedLengthString(length, mvarAccessor.DefaultEncoding); + return this.ReadFixedLengthString(length, base.Accessor.DefaultEncoding); } public string ReadFixedLengthString(byte length, Encoding encoding) @@ -288,7 +251,7 @@ namespace UniversalEditor.IO } public string ReadFixedLengthString(long length) { - return ReadFixedLengthString(length, mvarAccessor.DefaultEncoding); + return ReadFixedLengthString(length, base.Accessor.DefaultEncoding); } public string ReadFixedLengthString(long length, Encoding encoding) { @@ -312,7 +275,7 @@ namespace UniversalEditor.IO byte i = 0; byte j = 0; byte k = 0; - if (!this.mvarReverse) + if (!this.Reverse) { a = ReadUInt32(); b = ReadUInt16(); @@ -356,12 +319,12 @@ namespace UniversalEditor.IO { byte[] buffer = ReadBytes((uint)2); byte[] _buffer = new byte[2]; - if (this.mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { _buffer[0] = buffer[0]; _buffer[1] = buffer[1]; } - else if (mvarEndianness == IO.Endianness.BigEndian) + else if (base.Endianness == Endianness.BigEndian) { _buffer[0] = buffer[1]; _buffer[1] = buffer[0]; @@ -382,14 +345,14 @@ namespace UniversalEditor.IO { byte[] buffer = ReadBytes((uint)3); byte[] _buffer = new byte[3]; - if (this.mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { _buffer[0] = buffer[0]; _buffer[1] = buffer[1]; _buffer[2] = buffer[2]; _buffer[3] = 0; } - else if (mvarEndianness == IO.Endianness.BigEndian) + else if (base.Endianness == Endianness.BigEndian) { _buffer[0] = 0; _buffer[1] = buffer[2]; @@ -412,14 +375,14 @@ namespace UniversalEditor.IO { byte[] buffer = ReadBytes((uint)4); byte[] _buffer = new byte[4]; - if (this.mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { _buffer[0] = buffer[0]; _buffer[1] = buffer[1]; _buffer[2] = buffer[2]; _buffer[3] = buffer[3]; } - else if (mvarEndianness == IO.Endianness.BigEndian) + else if (base.Endianness == Endianness.BigEndian) { _buffer[0] = buffer[3]; _buffer[1] = buffer[2]; @@ -442,7 +405,7 @@ namespace UniversalEditor.IO { byte[] buffer = ReadBytes((uint)8); byte[] _buffer = new byte[8]; - if (this.mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { _buffer[0] = buffer[0]; _buffer[1] = buffer[1]; @@ -453,7 +416,7 @@ namespace UniversalEditor.IO _buffer[6] = buffer[6]; _buffer[7] = buffer[7]; } - else if (mvarEndianness == IO.Endianness.BigEndian) + else if (base.Endianness == Endianness.BigEndian) { _buffer[0] = buffer[7]; _buffer[1] = buffer[6]; @@ -480,7 +443,7 @@ namespace UniversalEditor.IO { byte[] buffer = ReadBytes((uint)4); byte[] _buffer = new byte[4]; - if (mvarEndianness == Endianness.BigEndian) + if (base.Endianness == Endianness.BigEndian) { _buffer[0] = buffer[3]; _buffer[1] = buffer[2]; @@ -510,7 +473,7 @@ namespace UniversalEditor.IO { byte[] buffer = ReadBytes((uint)8); byte[] _buffer = new byte[8]; - if (mvarEndianness == Endianness.BigEndian) + if (base.Endianness == Endianness.BigEndian) { _buffer[0] = buffer[7]; _buffer[1] = buffer[6]; @@ -547,7 +510,7 @@ namespace UniversalEditor.IO public ushort ReadUInt16 () { byte[] buffer = ReadBytes(2); - if (mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { return (ushort)(buffer[0] | (buffer[1] << 8)); } @@ -567,7 +530,7 @@ namespace UniversalEditor.IO { // TODO: Test this out! byte[] buffer = ReadBytes(3); - if (mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { return (uint)((buffer[2] << 16) | (buffer[1] << 8) | (buffer[0])); } @@ -586,7 +549,7 @@ namespace UniversalEditor.IO public uint ReadUInt32() { byte[] buffer = ReadBytes((uint)4); - if (this.mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { return (uint)(((buffer[0] | (buffer[1] << 8)) | (buffer[2] << 0x10)) | (buffer[3] << 0x18)); } @@ -638,7 +601,7 @@ namespace UniversalEditor.IO public ulong ReadUInt48() { byte[] buffer = ReadBytes((uint)6); - if (this.mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { uint num = (uint)(((buffer[0] << 0x10)) | (buffer[1] << 0x18)); uint num2 = (uint)(((buffer[2] | (buffer[3] << 8)) | (buffer[4] << 0x10)) | (buffer[5] << 0x18)); @@ -664,13 +627,13 @@ namespace UniversalEditor.IO public ulong ReadUInt64() { byte[] buffer = ReadBytes((uint)8); - if (this.mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { uint num = (uint)(((buffer[0] | (buffer[1] << 8)) | (buffer[2] << 0x10)) | (buffer[3] << 0x18)); uint num2 = (uint)(((buffer[4] | (buffer[5] << 8)) | (buffer[6] << 0x10)) | (buffer[7] << 0x18)); return (ulong)(num << 0x20 | num2); } - else if (mvarEndianness == IO.Endianness.BigEndian) + else if (base.Endianness == Endianness.BigEndian) { uint num = (uint)(((buffer[7] | (buffer[6] << 8)) | (buffer[5] << 0x10)) | (buffer[4] << 0x18)); uint num2 = (uint)(((buffer[3] | (buffer[2] << 8)) | (buffer[1] << 0x10)) | (buffer[0] << 0x18)); @@ -690,12 +653,12 @@ namespace UniversalEditor.IO public string ReadNullTerminatedString() { - return this.ReadNullTerminatedString(mvarAccessor.DefaultEncoding); + return this.ReadNullTerminatedString(base.Accessor.DefaultEncoding); } public string ReadNullTerminatedString(int maxLength) { - return this.ReadNullTerminatedString(maxLength, mvarAccessor.DefaultEncoding); + return this.ReadNullTerminatedString(maxLength, base.Accessor.DefaultEncoding); } public string ReadNullTerminatedString(Encoding encoding) @@ -745,7 +708,7 @@ namespace UniversalEditor.IO public byte[] ReadToEnd() { - return ReadBytes(mvarAccessor.Remaining); + return ReadBytes(base.Accessor.Remaining); } public string ReadStringToEnd(Encoding encoding = null) { @@ -795,11 +758,11 @@ namespace UniversalEditor.IO } public string ReadUntil(string sequence) { - return ReadUntil(sequence, mvarAccessor.DefaultEncoding); + return ReadUntil(sequence, base.Accessor.DefaultEncoding); } public byte[] ReadUntil(string sequence, bool includeSequence) { - return ReadUntil(sequence, mvarAccessor.DefaultEncoding, includeSequence); + return ReadUntil(sequence, base.Accessor.DefaultEncoding, includeSequence); } public string ReadUntil(string sequence, Encoding encoding) { @@ -811,11 +774,11 @@ namespace UniversalEditor.IO } public byte[] ReadUntil(char[] sequence) { - return this.ReadUntil(sequence, mvarAccessor.DefaultEncoding); + return this.ReadUntil(sequence, base.Accessor.DefaultEncoding); } public byte[] ReadUntil(char[] sequence, bool includeSequence) { - return this.ReadUntil(sequence, mvarAccessor.DefaultEncoding, includeSequence); + return this.ReadUntil(sequence, base.Accessor.DefaultEncoding, includeSequence); } public byte[] ReadUntil(char[] sequence, Encoding encoding) { @@ -827,11 +790,11 @@ namespace UniversalEditor.IO } public string ReadStringUntil(string sequence) { - return ReadStringUntil(sequence, mvarAccessor.DefaultEncoding, mvarAccessor.DefaultEncoding); + return ReadStringUntil(sequence, base.Accessor.DefaultEncoding, base.Accessor.DefaultEncoding); } public string ReadStringUntil(string sequence, bool includeSequence) { - return ReadStringUntil(sequence, mvarAccessor.DefaultEncoding, mvarAccessor.DefaultEncoding, includeSequence); + return ReadStringUntil(sequence, base.Accessor.DefaultEncoding, base.Accessor.DefaultEncoding, includeSequence); } public string ReadStringUntil(string sequence, Encoding inputEncoding, Encoding outputEncoding) { @@ -843,11 +806,11 @@ namespace UniversalEditor.IO } public string ReadStringUntil(char[] sequence) { - return ReadStringUntil(sequence, mvarAccessor.DefaultEncoding, mvarAccessor.DefaultEncoding); + return ReadStringUntil(sequence, base.Accessor.DefaultEncoding, base.Accessor.DefaultEncoding); } public string ReadStringUntil(char[] sequence, bool includeSequence) { - return ReadStringUntil(sequence, mvarAccessor.DefaultEncoding, mvarAccessor.DefaultEncoding, includeSequence); + return ReadStringUntil(sequence, base.Accessor.DefaultEncoding, base.Accessor.DefaultEncoding, includeSequence); } public string ReadStringUntil(char[] sequence, Encoding inputEncoding, Encoding outputEncoding) { @@ -869,7 +832,7 @@ namespace UniversalEditor.IO public string[] ReadNullTerminatedStringArray(int stringTableSize) { System.Collections.Generic.List list = new System.Collections.Generic.List(); - while (mvarAccessor.Remaining < stringTableSize) + while (base.Accessor.Remaining < stringTableSize) { list.Add(ReadNullTerminatedString()); } @@ -919,22 +882,22 @@ namespace UniversalEditor.IO public short ReadDoubleEndianInt16() { short value1 = ReadInt16(); - if (mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { - mvarEndianness = Endianness.BigEndian; + base.Endianness = Endianness.BigEndian; } else { - mvarEndianness = Endianness.LittleEndian; + base.Endianness = Endianness.LittleEndian; } short value2 = ReadInt16(); - if (mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { - mvarEndianness = Endianness.BigEndian; + base.Endianness = Endianness.BigEndian; } else { - mvarEndianness = Endianness.LittleEndian; + base.Endianness = Endianness.LittleEndian; } if (value2 != value1) @@ -946,22 +909,22 @@ namespace UniversalEditor.IO public ushort ReadDoubleEndianUInt16() { ushort value1 = ReadUInt16(); - if (mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { - mvarEndianness = Endianness.BigEndian; + base.Endianness = Endianness.BigEndian; } else { - mvarEndianness = Endianness.LittleEndian; + base.Endianness = Endianness.LittleEndian; } ushort value2 = ReadUInt16(); - if (mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { - mvarEndianness = Endianness.BigEndian; + base.Endianness = Endianness.BigEndian; } else { - mvarEndianness = Endianness.LittleEndian; + base.Endianness = Endianness.LittleEndian; } if (value2 != value1) @@ -973,22 +936,22 @@ namespace UniversalEditor.IO public int ReadDoubleEndianInt32() { int value1 = ReadInt32(); - if (mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { - mvarEndianness = Endianness.BigEndian; + base.Endianness = Endianness.BigEndian; } else { - mvarEndianness = Endianness.LittleEndian; + base.Endianness = Endianness.LittleEndian; } int value2 = ReadInt32(); - if (mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { - mvarEndianness = Endianness.BigEndian; + base.Endianness = Endianness.BigEndian; } else { - mvarEndianness = Endianness.LittleEndian; + base.Endianness = Endianness.LittleEndian; } if (value2 != value1) @@ -1000,22 +963,22 @@ namespace UniversalEditor.IO public uint ReadDoubleEndianUInt32() { uint value1 = ReadUInt32(); - if (mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { - mvarEndianness = Endianness.BigEndian; + base.Endianness = Endianness.BigEndian; } else { - mvarEndianness = Endianness.LittleEndian; + base.Endianness = Endianness.LittleEndian; } uint value2 = ReadUInt32(); - if (mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { - mvarEndianness = Endianness.BigEndian; + base.Endianness = Endianness.BigEndian; } else { - mvarEndianness = Endianness.LittleEndian; + base.Endianness = Endianness.LittleEndian; } if (value2 != value1) @@ -1146,7 +1109,7 @@ namespace UniversalEditor.IO /// public string ReadInt32String() { - return ReadInt32String(mvarAccessor.DefaultEncoding); + return ReadInt32String(base.Accessor.DefaultEncoding); } /// /// Reads a 32-bit integer length-prefixed string using the specified encoding. @@ -1211,18 +1174,18 @@ namespace UniversalEditor.IO public void SeekUntil(string find) { - SeekUntil(find, mvarAccessor.DefaultEncoding); + SeekUntil(find, base.Accessor.DefaultEncoding); } public void SeekUntil(string find, Encoding encoding) { byte[] data = encoding.GetBytes(find); byte[] dataCmp = new byte[data.Length]; - while (mvarAccessor.Position <= (mvarAccessor.Length - data.Length)) + while (base.Accessor.Position <= (base.Accessor.Length - data.Length)) { - long rest = mvarAccessor.Remaining; + long rest = base.Accessor.Remaining; - mvarAccessor.ReadInternal(dataCmp, 0, dataCmp.Length); - mvarAccessor.Seek(-(dataCmp.Length - 1), SeekOrigin.Current); + base.Accessor.ReadInternal(dataCmp, 0, dataCmp.Length); + base.Accessor.Seek(-(dataCmp.Length - 1), SeekOrigin.Current); bool bad = false; for (int i = 0; i < data.Length; i++) @@ -1235,7 +1198,7 @@ namespace UniversalEditor.IO } if (!bad) { - mvarAccessor.Seek(-1, SeekOrigin.Current); + base.Accessor.Seek(-1, SeekOrigin.Current); break; } } @@ -1253,11 +1216,11 @@ namespace UniversalEditor.IO byte b2 = buffer[i + 1]; int index = (int)(i / 2); - if (mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { buffer2[index] = (short)(b1 | (b2 << 8)); } - else if (mvarEndianness == Endianness.BigEndian) + else if (base.Endianness == Endianness.BigEndian) { buffer2[index] = (short)(b2 | (b1 << 8)); } @@ -1274,13 +1237,13 @@ namespace UniversalEditor.IO /// The number of bytes on which to align the . public void Align(int alignTo) { - long paddingCount = ((alignTo - (mvarAccessor.Position % alignTo)) % alignTo); - mvarAccessor.Position += paddingCount; + long paddingCount = ((alignTo - (base.Accessor.Position % alignTo)) % alignTo); + base.Accessor.Position += paddingCount; } public string PeekFixedLengthString(int count) { - return PeekFixedLengthString(count, mvarAccessor.DefaultEncoding); + return PeekFixedLengthString(count, base.Accessor.DefaultEncoding); } public string PeekFixedLengthString(int count, Encoding encoding) { @@ -1296,7 +1259,7 @@ namespace UniversalEditor.IO { byte[] buffer = ReadBytes(2); byte[] buffer2 = new byte[4]; - if (mvarEndianness == Endianness.LittleEndian) + if (base.Endianness == Endianness.LittleEndian) { buffer2[0] = 0; buffer2[1] = 0; @@ -1315,17 +1278,17 @@ namespace UniversalEditor.IO public int ReadAtMostBytes(byte[] buffer, int count) { - if (mvarAccessor.Remaining == 0) return 0; + if (base.Accessor.Remaining == 0) return 0; - if (count < mvarAccessor.Remaining) + if (count < base.Accessor.Remaining) { Read(buffer, 0, count); return count; } else { - Read(buffer, 0, (int)mvarAccessor.Remaining); - return (int)mvarAccessor.Remaining; + Read(buffer, 0, (int)base.Accessor.Remaining); + return (int)base.Accessor.Remaining; } } @@ -1360,7 +1323,7 @@ namespace UniversalEditor.IO return x; } - public bool EndOfStream { get { return mvarAccessor.Remaining == 0; } } + public bool EndOfStream { get { return base.Accessor.Remaining == 0; } } public string ReadInt64String() { @@ -1457,19 +1420,19 @@ namespace UniversalEditor.IO public void Seek(int length, SeekOrigin origin) { - mvarAccessor.Seek(length, origin); + base.Accessor.Seek(length, origin); } public void Seek(long length, SeekOrigin origin) { - mvarAccessor.Seek(length, origin); + base.Accessor.Seek(length, origin); } public void Close() { - mvarAccessor.Close(); + base.Accessor.Close(); } - public long Remaining { get { return mvarAccessor.Remaining; } } + public long Remaining { get { return base.Accessor.Remaining; } } } } diff --git a/CSharp/Libraries/UniversalEditor.Core/IO/ReaderWriterBase.cs b/CSharp/Libraries/UniversalEditor.Core/IO/ReaderWriterBase.cs new file mode 100644 index 00000000..137ae2c4 --- /dev/null +++ b/CSharp/Libraries/UniversalEditor.Core/IO/ReaderWriterBase.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.IO +{ + public abstract class ReaderWriterBase + { + private Endianness mvarEndianness = Endianness.LittleEndian; + public Endianness Endianness { get { return mvarEndianness; } set { mvarEndianness = value; } } + + public void SwapEndianness() + { + if (mvarEndianness == IO.Endianness.LittleEndian) + { + mvarEndianness = IO.Endianness.BigEndian; + } + else + { + mvarEndianness = IO.Endianness.LittleEndian; + } + } + + private bool mvarReverse = false; + public bool Reverse { get { return mvarReverse; } } + + private Accessor mvarAccessor = null; + public Accessor Accessor { get { return mvarAccessor; } } + + private NewLineSequence mvarNewLineSequence = NewLineSequence.Default; + public NewLineSequence NewLineSequence { get { return mvarNewLineSequence; } set { mvarNewLineSequence = value; } } + public string GetNewLineSequence() + { + string newline = System.Environment.NewLine; + switch (mvarNewLineSequence) + { + case IO.NewLineSequence.CarriageReturn: + { + newline = "\r"; + break; + } + case IO.NewLineSequence.LineFeed: + { + newline = "\n"; + break; + } + case IO.NewLineSequence.CarriageReturnLineFeed: + { + newline = "\r\n"; + break; + } + case IO.NewLineSequence.LineFeedCarriageReturn: + { + newline = "\n\r"; + break; + } + } + return newline; + } + + public ReaderWriterBase(Accessor accessor) + { + this.mvarAccessor = accessor; + this.mvarEndianness = Endianness.LittleEndian; + this.mvarReverse = false; + } + } +} diff --git a/CSharp/Libraries/UniversalEditor.Core/IO/Writer.cs b/CSharp/Libraries/UniversalEditor.Core/IO/Writer.cs index 875e81ad..f1bb8b2d 100644 --- a/CSharp/Libraries/UniversalEditor.Core/IO/Writer.cs +++ b/CSharp/Libraries/UniversalEditor.Core/IO/Writer.cs @@ -21,64 +21,17 @@ using System.IO; namespace UniversalEditor.IO { - public class Writer + public class Writer : ReaderWriterBase { - private Accessor mvarAccessor = null; - public Accessor Accessor { get { return mvarAccessor; } } - - private Endianness mvarEndianness = Endianness.LittleEndian; - public Endianness Endianness - { - get { return mvarEndianness; } - set { mvarEndianness = value; } - } - - private NewLineSequence mvarNewLineSequence = NewLineSequence.Default; - public NewLineSequence NewLineSequence { get { return mvarNewLineSequence; } set { mvarNewLineSequence = value; } } - public string GetNewLineSequence() - { - string newline = System.Environment.NewLine; - switch (mvarNewLineSequence) - { - case IO.NewLineSequence.CarriageReturn: - { - newline = "\r"; - break; - } - case IO.NewLineSequence.LineFeed: - { - newline = "\n"; - break; - } - case IO.NewLineSequence.CarriageReturnLineFeed: - { - newline = "\r\n"; - break; - } - } - return newline; - } - - public void SwapEndianness() - { - if (mvarEndianness == IO.Endianness.LittleEndian) - { - mvarEndianness = IO.Endianness.BigEndian; - } - else - { - mvarEndianness = IO.Endianness.LittleEndian; - } - } public Writer(Accessor accessor) + : base(accessor) { - mvarAccessor = accessor; } public void Write(byte[] buffer, int start, int count) { - mvarAccessor.WriteInternal(buffer, start, count); + base.Accessor.WriteInternal(buffer, start, count); } public void WriteBoolean(bool value) @@ -108,7 +61,7 @@ namespace UniversalEditor.IO public void WriteChar(char value) { - WriteChar(value, mvarAccessor.DefaultEncoding); + WriteChar(value, base.Accessor.DefaultEncoding); } public void WriteChar(char value, Encoding encoding) { @@ -143,15 +96,15 @@ namespace UniversalEditor.IO } public void WriteFixedLengthString(string value) { - WriteFixedLengthString(value, mvarAccessor.DefaultEncoding); + WriteFixedLengthString(value, base.Accessor.DefaultEncoding); } public void WriteFixedLengthString(string value, int length) { - WriteFixedLengthString(value, mvarAccessor.DefaultEncoding, length); + WriteFixedLengthString(value, base.Accessor.DefaultEncoding, length); } public void WriteFixedLengthString(string value, uint length) { - WriteFixedLengthString(value, mvarAccessor.DefaultEncoding, length); + WriteFixedLengthString(value, base.Accessor.DefaultEncoding, length); } public void WriteFixedLengthString(string value, Encoding encoding) { @@ -160,11 +113,11 @@ namespace UniversalEditor.IO } public void WriteFixedLengthString(string value, int length, char paddingChar) { - WriteFixedLengthString(value, mvarAccessor.DefaultEncoding, length, paddingChar); + WriteFixedLengthString(value, base.Accessor.DefaultEncoding, length, paddingChar); } public void WriteFixedLengthString(string value, uint length, char paddingChar) { - this.WriteFixedLengthString(value, mvarAccessor.DefaultEncoding, length, paddingChar); + this.WriteFixedLengthString(value, base.Accessor.DefaultEncoding, length, paddingChar); } public void WriteFixedLengthString(string value, Encoding encoding, int length) { @@ -201,7 +154,7 @@ namespace UniversalEditor.IO public void WriteLengthPrefixedString(string value) { - WriteLengthPrefixedString(value, mvarAccessor.DefaultEncoding); + WriteLengthPrefixedString(value, base.Accessor.DefaultEncoding); } public void WriteLengthPrefixedString(string value, Encoding encoding) { @@ -235,7 +188,7 @@ namespace UniversalEditor.IO { byte[] _buffer = BitConverter.GetBytes(value); byte[] buffer = new byte[2]; - if (mvarEndianness == Endianness.BigEndian) + if (base.Endianness == Endianness.BigEndian) { buffer[1] = _buffer[0]; buffer[0] = _buffer[1]; @@ -251,7 +204,7 @@ namespace UniversalEditor.IO { byte[] _buffer = BitConverter.GetBytes(value); byte[] buffer = new byte[2]; - if (mvarEndianness == Endianness.BigEndian) + if (base.Endianness == Endianness.BigEndian) { buffer[1] = _buffer[0]; buffer[0] = _buffer[1]; @@ -266,7 +219,7 @@ namespace UniversalEditor.IO public void WriteInt24 (int value) { byte[] buffer = new byte[3]; - if (mvarEndianness == Endianness.BigEndian) + if (base.Endianness == Endianness.BigEndian) { buffer[2] = (byte)value; buffer[1] = (byte)(value >> 8); @@ -283,7 +236,7 @@ namespace UniversalEditor.IO public void WriteUInt24(uint value) { byte[] buffer = new byte[3]; - if (mvarEndianness == Endianness.BigEndian) + if (base.Endianness == Endianness.BigEndian) { buffer[2] = (byte)value; buffer[1] = (byte)(value >> 8); @@ -301,7 +254,7 @@ namespace UniversalEditor.IO { byte[] _buffer = BitConverter.GetBytes(value); byte[] buffer = new byte[4]; - if (mvarEndianness == Endianness.BigEndian) + if (base.Endianness == Endianness.BigEndian) { buffer[3] = _buffer[0]; buffer[2] = _buffer[1]; @@ -321,7 +274,7 @@ namespace UniversalEditor.IO { byte[] _buffer = BitConverter.GetBytes(value); byte[] buffer = new byte[4]; - if (mvarEndianness == Endianness.BigEndian) + if (base.Endianness == Endianness.BigEndian) { buffer[3] = _buffer[0]; buffer[2] = _buffer[1]; @@ -340,7 +293,7 @@ namespace UniversalEditor.IO public void WriteInt64(long value) { byte[] _buffer = new byte[8]; - if (mvarEndianness == IO.Endianness.BigEndian) + if (base.Endianness == IO.Endianness.BigEndian) { _buffer[0] = (byte)(value >> 56); _buffer[1] = (byte)(value >> 48); @@ -367,7 +320,7 @@ namespace UniversalEditor.IO public void WriteUInt64(ulong value) { byte[] _buffer = new byte[8]; - if (mvarEndianness == IO.Endianness.BigEndian) + if (base.Endianness == IO.Endianness.BigEndian) { _buffer[0] = (byte)(value >> 56); _buffer[1] = (byte)(value >> 48); @@ -491,7 +444,7 @@ namespace UniversalEditor.IO int lo = bits[0], mid = bits[1], hi = bits[2], flags = bits[3]; byte[] buffer = new byte[16]; - if (mvarEndianness == IO.Endianness.LittleEndian) + if (base.Endianness == IO.Endianness.LittleEndian) { buffer[0] = (byte)lo; buffer[1] = (byte)(lo >> 8); @@ -579,7 +532,7 @@ namespace UniversalEditor.IO } public long CountAlignment(int paddingCount, int dataCount) { - long position = (mvarAccessor.Position + dataCount); + long position = (base.Accessor.Position + dataCount); int num = (int)(position % paddingCount); return num; } @@ -591,7 +544,7 @@ namespace UniversalEditor.IO { case 2: { - long position = mvarAccessor.Position; + long position = base.Accessor.Position; int num = (int)(position % 2L); byte[] array = new byte[num]; array.Initialize(); @@ -600,9 +553,9 @@ namespace UniversalEditor.IO } case 4: { - long num = mvarAccessor.Position; + long num = base.Accessor.Position; num = (num + 3L & -4L); - long num2 = num - mvarAccessor.Position; + long num2 = num - base.Accessor.Position; byte[] array = new byte[num2]; array.Initialize(); WriteBytes(array); @@ -610,7 +563,7 @@ namespace UniversalEditor.IO } default: { - long count = (mvarAccessor.Position % paddingCount); + long count = (base.Accessor.Position % paddingCount); byte[] array = new byte[count]; WriteBytes(array); break; @@ -623,7 +576,7 @@ namespace UniversalEditor.IO { byte[] buffer = BitConverter.GetBytes(value); byte[] _buffer = new byte[4]; - if (mvarEndianness == IO.Endianness.BigEndian) + if (base.Endianness == IO.Endianness.BigEndian) { _buffer[0] = buffer[3]; _buffer[1] = buffer[2]; @@ -643,7 +596,7 @@ namespace UniversalEditor.IO { byte[] buffer = BitConverter.GetBytes(value); byte[] _buffer = new byte[8]; - if (mvarEndianness == IO.Endianness.BigEndian) + if (base.Endianness == IO.Endianness.BigEndian) { _buffer[0] = buffer[7]; _buffer[1] = buffer[6]; @@ -713,7 +666,7 @@ namespace UniversalEditor.IO public void WriteUInt16String(string value) { - WriteUInt16String(value, mvarAccessor.DefaultEncoding); + WriteUInt16String(value, base.Accessor.DefaultEncoding); } public void WriteUInt16String(string value, Encoding encoding) { @@ -727,7 +680,7 @@ namespace UniversalEditor.IO public void WriteUInt16SizedString(string value) { - WriteUInt16SizedString(value, mvarAccessor.DefaultEncoding); + WriteUInt16SizedString(value, base.Accessor.DefaultEncoding); } public void WriteUInt16SizedString(string value, Encoding encoding) { @@ -746,11 +699,11 @@ namespace UniversalEditor.IO public void Flush() { - mvarAccessor.FlushInternal(); + base.Accessor.FlushInternal(); } public void Close() { - mvarAccessor.Close(); + base.Accessor.Close(); } } } diff --git a/CSharp/Libraries/UniversalEditor.Core/UniversalEditor.Core.csproj b/CSharp/Libraries/UniversalEditor.Core/UniversalEditor.Core.csproj index 78671d84..278b50e3 100644 --- a/CSharp/Libraries/UniversalEditor.Core/UniversalEditor.Core.csproj +++ b/CSharp/Libraries/UniversalEditor.Core/UniversalEditor.Core.csproj @@ -67,6 +67,7 @@ +