Worms4Editor/LibXom/Streams/XomStreamReader.cs

100 lines
2.4 KiB
C#

using LibXom.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibXom.Streams
{
public class XomStreamReader : IDisposable
{
private Stream xStream;
public Stream BaseStream
{
get
{
return xStream;
}
}
public int[] ReadCompressedIntArray()
{
int len = this.ReadCompressedInt();
int[] arr = new int[len];
for(int i = 0; i < len; i++) arr[i] = this.ReadCompressedInt();
return arr;
}
public int ReadCompressedInt()
{
return XomCompressor.ReadCompressedIntFromStream(xStream);
}
public byte[] ReadBytes(int amt)
{
byte[] buffer = new byte[amt];
xStream.Read(buffer, 0, amt);
return buffer;
}
public bool ReadBool()
{
return (ReadByte() == 0x01);
}
public byte ReadByte()
{
return Convert.ToByte(xStream.ReadByte());
}
public string ReadStrLen(int len)
{
byte[] buf = ReadBytes(len);
int rlen = 0;
for (rlen = 0; rlen < len; rlen++)
if (buf[rlen] == 0) break;
return Encoding.UTF8.GetString(buf, 0, rlen);
}
public string ReadCStr()
{
List<byte> cstr = new List<byte>();
while (true)
{
byte c = ReadByte();
if (c == 0) break;
cstr.Add(c);
}
return Encoding.UTF8.GetString(cstr.ToArray());
}
public void Skip(int amt)
{
xStream.Seek(amt, SeekOrigin.Current);
}
public float ReadFloat()
{
return BitConverter.ToSingle(ReadBytes(0x4));
}
public int ReadInt32()
{
return BitConverter.ToInt32(ReadBytes(0x4));
}
public int ReadInt32BE()
{
byte[] buffer = ReadBytes(0x4);
buffer.Reverse();
return BitConverter.ToInt32(buffer);
}
public void Dispose()
{
this.xStream.Dispose();
}
public XomStreamReader(Stream xStream)
{
this.xStream = xStream;
}
}
}