Files
sceWork/StreamFAdd/StreamFunctionAdd.cs
2021-02-06 17:43:14 -05:00

518 lines
20 KiB
C#

using System;
using System.IO;
namespace StreamFAdd
{
public class StreamFunctionAdd
{
private Stream Source;
private ByteEncoding Encoding;
public long LengthStream
{
get => this.Source.Length;
set => this.Source.SetLength(value);
}
public long PositionStream
{
get => this.Source.Position;
set => this.Source.Position = value;
}
public Stream GetSource() => this.Source;
public StreamFunctionAdd(Stream source, ByteEncoding encoding = ByteEncoding.Little)
{
this.Source = source;
this.Encoding = encoding;
if (this.Encoding != ByteEncoding.Selected)
return;
this.Encoding = ByteEncoding.Little;
}
public StreamFunctionAdd(string FileName, ByteEncoding encoding = ByteEncoding.Little)
{
this.Source = (Stream)new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
this.Encoding = encoding;
if (this.Encoding != ByteEncoding.Selected)
return;
this.Encoding = ByteEncoding.Little;
}
public StreamFunctionAdd(ByteEncoding encoding = ByteEncoding.Little)
{
this.Source = (Stream)new MemoryStream();
this.Encoding = encoding;
if (this.Encoding != ByteEncoding.Selected)
return;
this.Encoding = ByteEncoding.Little;
}
public void ChangeByteEncoding(ByteEncoding encoding)
{
if (encoding == ByteEncoding.Selected)
return;
this.Encoding = encoding;
}
public void Dispose() => this.Source.Dispose();
public byte ReadByte()
{
int num = this.Source.ReadByte();
return num != -1 ? (byte)num : throw new EndOfStreamException("Stream end");
}
public byte[] ReadBytes(int count)
{
byte[] buffer = new byte[count];
this.Source.Read(buffer, 0, count);
return buffer;
}
public short ReadInt16(ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
short num = 0;
if (encoding != ByteEncoding.Little)
{
if (encoding == ByteEncoding.Big)
num = (short)((int)this.ReadByte() << 8 | (int)this.ReadByte());
}
else
num = (short)((int)this.ReadByte() | (int)this.ReadByte() << 8);
return num;
}
public ushort ReadUInt16(ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
ushort num = 0;
if (encoding != ByteEncoding.Little)
{
if (encoding == ByteEncoding.Big)
num = (ushort)((uint)this.ReadByte() << 8 | (uint)this.ReadByte());
}
else
num = (ushort)((uint)this.ReadByte() | (uint)this.ReadByte() << 8);
return num;
}
public int ReadInt32(ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
int num = 0;
if (encoding != ByteEncoding.Little)
{
if (encoding == ByteEncoding.Big)
num = (int)this.ReadByte() << 24 | (int)this.ReadByte() << 16 | (int)this.ReadByte() << 8 | (int)this.ReadByte();
}
else
num = (int)this.ReadByte() | (int)this.ReadByte() << 8 | (int)this.ReadByte() << 16 | (int)this.ReadByte() << 24;
return num;
}
public uint ReadUInt32(ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
uint num = 0;
if (encoding != ByteEncoding.Little)
{
if (encoding == ByteEncoding.Big)
num = (uint)((int)this.ReadByte() << 24 | (int)this.ReadByte() << 16 | (int)this.ReadByte() << 8) | (uint)this.ReadByte();
}
else
num = (uint)((int)this.ReadByte() | (int)this.ReadByte() << 8 | (int)this.ReadByte() << 16 | (int)this.ReadByte() << 24);
return num;
}
public long ReadInt64(ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
long num = 0;
if (encoding != ByteEncoding.Little)
{
if (encoding == ByteEncoding.Big)
num = (long)(this.ReadUInt32() << 24 | this.ReadUInt32());
}
else
num = (long)(this.ReadUInt32() | this.ReadUInt32() << 24);
return num;
}
public ulong ReadUInt64(ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
ulong num = ulong.MaxValue;
if (encoding != ByteEncoding.Little)
{
if (encoding == ByteEncoding.Big)
num = (ulong)(this.ReadUInt32() << 24 | this.ReadUInt32());
}
else
num = (ulong)(this.ReadUInt32() | this.ReadUInt32() << 24);
return num;
}
public float ReadFloat(ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
return BitConverter.ToSingle(BitConverter.GetBytes(this.ReadUInt32(encoding)), 0);
}
public float ReadFloatBR(ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
byte[] numArray = new BinaryReader(this.Source).ReadBytes(4);
if (encoding == ByteEncoding.Big)
{
byte num1 = numArray[0];
numArray[0] = numArray[3];
numArray[3] = num1;
byte num2 = numArray[1];
numArray[1] = numArray[2];
numArray[2] = num2;
}
return BitConverter.ToSingle(numArray, 0);
}
public void WriteByte(byte value) => this.Source.WriteByte(value);
public void WriteBytes(byte[] bytes) => this.Source.Write(bytes, 0, bytes.Length);
public void WriteInt16(short value, ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
if (encoding != ByteEncoding.Little)
{
if (encoding != ByteEncoding.Big)
return;
this.WriteByte((byte)((int)value >> 8 & (int)byte.MaxValue));
this.WriteByte((byte)((uint)value & (uint)byte.MaxValue));
}
else
{
this.WriteByte((byte)((uint)value & (uint)byte.MaxValue));
this.WriteByte((byte)((int)value >> 8 & (int)byte.MaxValue));
}
}
public void WriteUInt16(ushort value, ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
if (encoding != ByteEncoding.Little)
{
if (encoding != ByteEncoding.Big)
return;
this.WriteByte((byte)((int)value >> 8 & (int)byte.MaxValue));
this.WriteByte((byte)((uint)value & (uint)byte.MaxValue));
}
else
{
this.WriteByte((byte)((uint)value & (uint)byte.MaxValue));
this.WriteByte((byte)((int)value >> 8 & (int)byte.MaxValue));
}
}
public void WriteInt32(int value, ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
if (encoding != ByteEncoding.Little)
{
if (encoding != ByteEncoding.Big)
return;
this.WriteByte((byte)(value >> 24 & (int)byte.MaxValue));
this.WriteByte((byte)(value >> 16 & (int)byte.MaxValue));
this.WriteByte((byte)(value >> 8 & (int)byte.MaxValue));
this.WriteByte((byte)(value & (int)byte.MaxValue));
}
else
{
this.WriteByte((byte)(value & (int)byte.MaxValue));
this.WriteByte((byte)(value >> 8 & (int)byte.MaxValue));
this.WriteByte((byte)(value >> 16 & (int)byte.MaxValue));
this.WriteByte((byte)(value >> 24 & (int)byte.MaxValue));
}
}
public void WriteUInt32(uint value, ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
if (encoding != ByteEncoding.Little)
{
if (encoding != ByteEncoding.Big)
return;
this.WriteByte((byte)(value >> 24 & (uint)byte.MaxValue));
this.WriteByte((byte)(value >> 16 & (uint)byte.MaxValue));
this.WriteByte((byte)(value >> 8 & (uint)byte.MaxValue));
this.WriteByte((byte)(value & (uint)byte.MaxValue));
}
else
{
this.WriteByte((byte)(value & (uint)byte.MaxValue));
this.WriteByte((byte)(value >> 8 & (uint)byte.MaxValue));
this.WriteByte((byte)(value >> 16 & (uint)byte.MaxValue));
this.WriteByte((byte)(value >> 24 & (uint)byte.MaxValue));
}
}
public void WriteInt64(long value, ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
if (encoding != ByteEncoding.Little)
{
if (encoding != ByteEncoding.Big)
return;
this.WriteByte((byte)((ulong)(value >> 56) & (ulong)byte.MaxValue));
this.WriteByte((byte)((ulong)(value >> 48) & (ulong)byte.MaxValue));
this.WriteByte((byte)((ulong)(value >> 40) & (ulong)byte.MaxValue));
this.WriteByte((byte)((ulong)(value >> 32) & (ulong)byte.MaxValue));
this.WriteByte((byte)((ulong)(value >> 24) & (ulong)byte.MaxValue));
this.WriteByte((byte)((ulong)(value >> 16) & (ulong)byte.MaxValue));
this.WriteByte((byte)((ulong)(value >> 8) & (ulong)byte.MaxValue));
this.WriteByte((byte)((ulong)value & (ulong)byte.MaxValue));
}
else
{
this.WriteByte((byte)((ulong)value & (ulong)byte.MaxValue));
this.WriteByte((byte)((ulong)(value >> 8) & (ulong)byte.MaxValue));
this.WriteByte((byte)((ulong)(value >> 16) & (ulong)byte.MaxValue));
this.WriteByte((byte)((ulong)(value >> 24) & (ulong)byte.MaxValue));
this.WriteByte((byte)((ulong)(value >> 32) & (ulong)byte.MaxValue));
this.WriteByte((byte)((ulong)(value >> 40) & (ulong)byte.MaxValue));
this.WriteByte((byte)((ulong)(value >> 48) & (ulong)byte.MaxValue));
this.WriteByte((byte)((ulong)(value >> 56) & (ulong)byte.MaxValue));
}
}
public void WriteUInt64(ulong value, ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
if (encoding != ByteEncoding.Little)
{
if (encoding != ByteEncoding.Big)
return;
this.WriteByte((byte)(value >> 56 & (ulong)byte.MaxValue));
this.WriteByte((byte)(value >> 48 & (ulong)byte.MaxValue));
this.WriteByte((byte)(value >> 40 & (ulong)byte.MaxValue));
this.WriteByte((byte)(value >> 32 & (ulong)byte.MaxValue));
this.WriteByte((byte)(value >> 24 & (ulong)byte.MaxValue));
this.WriteByte((byte)(value >> 16 & (ulong)byte.MaxValue));
this.WriteByte((byte)(value >> 8 & (ulong)byte.MaxValue));
this.WriteByte((byte)(value & (ulong)byte.MaxValue));
}
else
{
this.WriteByte((byte)(value & (ulong)byte.MaxValue));
this.WriteByte((byte)(value >> 8 & (ulong)byte.MaxValue));
this.WriteByte((byte)(value >> 16 & (ulong)byte.MaxValue));
this.WriteByte((byte)(value >> 24 & (ulong)byte.MaxValue));
this.WriteByte((byte)(value >> 32 & (ulong)byte.MaxValue));
this.WriteByte((byte)(value >> 40 & (ulong)byte.MaxValue));
this.WriteByte((byte)(value >> 48 & (ulong)byte.MaxValue));
this.WriteByte((byte)(value >> 56 & (ulong)byte.MaxValue));
}
}
public void WriteFloat(float value, ByteEncoding encoding = ByteEncoding.Selected)
{
if (encoding == ByteEncoding.Selected)
encoding = this.Encoding;
this.WriteUInt32(BitConverter.ToUInt32(BitConverter.GetBytes(value), 0), encoding);
}
public void CopyPartFrom(Stream from, int size, int buffersize = 4096)
{
if (size <= 0)
throw new Exception("Block size = 0");
byte[] buffer = new byte[buffersize];
if (from.Position + (long)size > from.Length)
size = (int)(from.Length - from.Position);
int num = size;
int count1 = buffersize;
if (count1 > num)
count1 = num;
int count2;
while ((count2 = from.Read(buffer, 0, count1)) != 0)
{
this.Source.Write(buffer, 0, count2);
num -= count2;
if (count1 > num)
count1 = num;
}
}
public void CopyPartFrom(byte[] from, int size, int indx = 0, int buffersize = 4096)
{
if (size <= 0)
throw new Exception("Block size = 0");
if (indx + size > from.Length)
size = from.Length - indx;
int num = size;
int count = buffersize;
if (count > num)
count = num;
do
{
this.Source.Write(from, indx, count);
indx += count;
num -= count;
if (count > num)
count = num;
}
while (indx < from.Length);
}
public void CopyPartTo(Stream destination, int size, int buffersize = 4096)
{
if (size <= 0)
throw new Exception("Block size = 0");
byte[] buffer = new byte[buffersize];
if (this.Source.Position + (long)size > this.Source.Length)
size = (int)(this.Source.Length - this.Source.Position);
int num = size;
int count1 = buffersize;
if (count1 > num)
count1 = num;
int count2;
while ((count2 = this.Source.Read(buffer, 0, count1)) != 0)
{
destination.Write(buffer, 0, count2);
num -= count2;
if (count1 > num)
count1 = num;
}
}
public void CopyPartTo(byte[] destination, int size, int buffersize = 4096)
{
if (size <= 0)
throw new Exception("Block size = 0");
byte[] buffer = new byte[buffersize];
if (this.Source.Position + (long)size > this.Source.Length)
size = (int)(this.Source.Length - this.Source.Position);
int num = size;
int count = buffersize;
if (count > num)
count = num;
int destinationIndex = 0;
int length;
while ((length = this.Source.Read(buffer, 0, count)) != 0)
{
Array.Copy((Array)buffer, 0, (Array)destination, destinationIndex, length);
destinationIndex += length;
num -= length;
if (count > num)
count = num;
}
}
public void CopyPartTo(StreamFunctionAdd destination, int size, int buffersize = 4096) => this.CopyPartTo(destination.GetSource(), size, buffersize);
public string ReadAnsiStringStopByte(byte StopByte = 0, int codePage = 1252)
{
int count = 0;
long position = this.Source.Position;
while ((int)this.ReadByte() != (int)StopByte)
++count;
this.Source.Position = position;
byte[] numArray = new byte[count];
this.Source.Read(numArray, 0, count);
++this.Source.Position;
return System.Text.Encoding.GetEncoding(codePage).GetString(numArray, 0, count);
}
public string ReadAnsiStringSize(int size, int codePage = 1252)
{
byte[] numArray = new byte[size];
this.Source.Read(numArray, 0, size);
for (int index = 0; index < size; ++index)
{
if (numArray[index] == (byte)0)
size = index;
}
return System.Text.Encoding.GetEncoding(codePage).GetString(numArray, 0, size);
}
public string ReadUTF8StringStopByte(byte StopByte = 0)
{
int count = 0;
long position = this.Source.Position;
while ((int)this.ReadByte() != (int)StopByte)
++count;
this.Source.Position = position;
byte[] numArray = new byte[count];
this.Source.Read(numArray, 0, count);
++this.Source.Position;
return System.Text.Encoding.UTF8.GetString(numArray, 0, count);
}
public string ReadUTF8StringSize(int size)
{
byte[] numArray = new byte[size];
this.Source.Read(numArray, 0, size);
return System.Text.Encoding.UTF8.GetString(numArray, 0, size);
}
public void WriteAnsiStringStopByte(string str, byte stopByte = 0, int codePage = 1252)
{
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding(codePage);
int byteCount = encoding.GetByteCount(str);
this.Source.Write(encoding.GetBytes(str), 0, byteCount);
this.Source.WriteByte(stopByte);
}
public void WriteUTF8StringStopByte(string Str, byte StopByte = 0)
{
int byteCount = System.Text.Encoding.UTF8.GetByteCount(Str);
this.Source.Write(System.Text.Encoding.UTF8.GetBytes(Str), 0, byteCount);
this.Source.WriteByte(StopByte);
}
public void SeekValue(uint value)
{
while (this.Source.Position % (long)value != 0L)
++this.Source.Position;
}
public void SeekValueWrite(uint value)
{
while (this.Source.Position % (long)value != 0L)
this.Source.WriteByte((byte)0);
}
public void SeekValueWrite(uint value, byte writeByte)
{
while (this.Source.Position % (long)value != 0L)
this.Source.WriteByte(writeByte);
}
public void SetPosition(long offset) => this.Source.Position = offset;
public long GetPosition() => this.Source.Position;
public void SaveToFile(string FileName)
{
using (FileStream fileStream = new FileStream(FileName, FileMode.Create))
{
this.Source.Position = 0L;
this.CopyPartTo((Stream)fileStream, (int)this.Source.Length);
}
}
}
}