using System; using System.IO; namespace SharpCompress.IO { internal class MarkingBinaryReader : BinaryReader { public MarkingBinaryReader(Stream stream) : base(stream) { } public long CurrentReadByteCount { get; private set; } public void Mark() { CurrentReadByteCount = 0; } public override int Read() { CurrentReadByteCount += 4; return base.Read(); } public override int Read(byte[] buffer, int index, int count) { CurrentReadByteCount += count; return base.Read(buffer, index, count); } public override int Read(char[] buffer, int index, int count) { throw new NotImplementedException(); } public override bool ReadBoolean() { CurrentReadByteCount++; return base.ReadBoolean(); } public override byte ReadByte() { CurrentReadByteCount++; return base.ReadByte(); } public override byte[] ReadBytes(int count) { CurrentReadByteCount += count; return base.ReadBytes(count); } public override char ReadChar() { throw new NotImplementedException(); } public override char[] ReadChars(int count) { throw new NotImplementedException(); } #if !SILVERLIGHT && !PORTABLE public override decimal ReadDecimal() { CurrentReadByteCount += 16; return base.ReadDecimal(); } #endif public override double ReadDouble() { CurrentReadByteCount += 8; return base.ReadDouble(); } public override short ReadInt16() { CurrentReadByteCount += 2; return base.ReadInt16(); } public override int ReadInt32() { CurrentReadByteCount += 4; return base.ReadInt32(); } public override long ReadInt64() { CurrentReadByteCount += 8; return base.ReadInt64(); } public override sbyte ReadSByte() { CurrentReadByteCount++; return base.ReadSByte(); } public override float ReadSingle() { CurrentReadByteCount += 4; return base.ReadSingle(); } public override string ReadString() { throw new NotImplementedException(); } public override ushort ReadUInt16() { CurrentReadByteCount += 2; return base.ReadUInt16(); } public override uint ReadUInt32() { CurrentReadByteCount += 4; return base.ReadUInt32(); } public override ulong ReadUInt64() { CurrentReadByteCount += 8; return base.ReadUInt64(); } } }