Improved file reading

This commit is contained in:
Perfare
2018-12-03 02:42:07 +08:00
parent 067517740f
commit 98c9eea58a
28 changed files with 517 additions and 616 deletions

View File

@ -8,6 +8,11 @@ namespace AssetStudio
{
public static class BinaryReaderExtensions
{
public static void AlignStream(this BinaryReader reader)
{
reader.AlignStream(4);
}
public static void AlignStream(this BinaryReader reader, int alignment)
{
var pos = reader.BaseStream.Position;
@ -65,6 +70,11 @@ namespace AssetStudio
return new System.Drawing.RectangleF(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
}
public static Color4 ReadColor4(this BinaryReader reader)
{
return new Color4(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
}
public static Matrix ReadMatrix(this BinaryReader reader)
{
var m = new Matrix();
@ -81,21 +91,41 @@ namespace AssetStudio
private static T[] ReadArray<T>(Func<T> del, int length)
{
var array = new T[length];
for (int i = 0; i < array.Length; i++)
for (int i = 0; i < length; i++)
{
array[i] = del();
}
return array;
}
public static bool[] ReadBooleanArray(this BinaryReader reader)
{
return ReadArray(reader.ReadBoolean, reader.ReadInt32());
}
public static ushort[] ReadUInt16Array(this BinaryReader reader)
{
return ReadArray(reader.ReadUInt16, reader.ReadInt32());
}
public static int[] ReadInt32Array(this BinaryReader reader)
{
return ReadArray(reader.ReadInt32, reader.ReadInt32());
}
public static int[] ReadInt32Array(this BinaryReader reader, int length)
{
return ReadArray(reader.ReadInt32, length);
}
public static uint[] ReadUInt32Array(this BinaryReader reader, int length)
public static uint[] ReadUInt32Array(this BinaryReader reader)
{
return ReadArray(reader.ReadUInt32, length);
return ReadArray(reader.ReadUInt32, reader.ReadInt32());
}
public static float[] ReadSingleArray(this BinaryReader reader)
{
return ReadArray(reader.ReadSingle, reader.ReadInt32());
}
public static float[] ReadSingleArray(this BinaryReader reader, int length)
@ -103,24 +133,24 @@ namespace AssetStudio
return ReadArray(reader.ReadSingle, length);
}
public static Vector2[] ReadVector2Array(this BinaryReader reader, int length)
public static string[] ReadStringArray(this BinaryReader reader)
{
return ReadArray(reader.ReadVector2, length);
return ReadArray(reader.ReadAlignedString, reader.ReadInt32());
}
public static Vector4[] ReadVector4Array(this BinaryReader reader, int length)
public static Vector2[] ReadVector2Array(this BinaryReader reader)
{
return ReadArray(reader.ReadVector4, length);
return ReadArray(reader.ReadVector2, reader.ReadInt32());
}
public static ushort[] ReadUInt16Array(this BinaryReader reader, int length)
public static Vector4[] ReadVector4Array(this BinaryReader reader)
{
return ReadArray(reader.ReadUInt16, length);
return ReadArray(reader.ReadVector4, reader.ReadInt32());
}
public static Matrix[] ReadMatrixArray(this BinaryReader reader, int length)
public static Matrix[] ReadMatrixArray(this BinaryReader reader)
{
return ReadArray(reader.ReadMatrix, length);
return ReadArray(reader.ReadMatrix, reader.ReadInt32());
}
}
}