mirror of
https://github.com/Dongyifengs/AssetStudio-Genshin-MoYi.git
synced 2025-04-22 12:39:18 +08:00
51 lines
976 B
C#
51 lines
976 B
C#
using System;
|
|
using System.IO;
|
|
using System.Runtime.CompilerServices;
|
|
|
|
namespace SpirV
|
|
{
|
|
internal sealed class Reader
|
|
{
|
|
public Reader(BinaryReader reader)
|
|
{
|
|
reader_ = reader;
|
|
uint magicNumber = reader_.ReadUInt32();
|
|
if (magicNumber == Meta.MagicNumber)
|
|
{
|
|
littleEndian_ = true;
|
|
}
|
|
else if (Reverse(magicNumber) == Meta.MagicNumber)
|
|
{
|
|
littleEndian_ = false;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("Invalid magic number");
|
|
}
|
|
}
|
|
|
|
public uint ReadDWord()
|
|
{
|
|
if (littleEndian_)
|
|
{
|
|
return reader_.ReadUInt32 ();
|
|
}
|
|
else
|
|
{
|
|
return Reverse(reader_.ReadUInt32());
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
private static uint Reverse(uint u)
|
|
{
|
|
return (u << 24) | (u & 0xFF00U) << 8 | (u >> 8) & 0xFF00U | (u >> 24);
|
|
}
|
|
|
|
public bool EndOfStream => reader_.BaseStream.Position == reader_.BaseStream.Length;
|
|
|
|
private readonly BinaryReader reader_;
|
|
private readonly bool littleEndian_;
|
|
}
|
|
}
|