| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | 
							- using System;
 
- using System.IO;
 
- namespace UnityFS
 
- {
 
-     public class EndianBinaryWriter : BinaryWriter
 
-     {
 
-         private readonly byte[] buffer;
 
-         public EndianType Endian;
 
-         public EndianBinaryWriter(Stream stream, EndianType endian = EndianType.BigEndian) : base(stream)
 
-         {
 
-             Endian = endian;
 
-             buffer = new byte[8];
 
-         }
 
-         public long Position
 
-         {
 
-             get => BaseStream.Position;
 
-             set => BaseStream.Position = value;
 
-         }
 
-         public long Length => BaseStream.Length;
 
-         public override void Write(short x)
 
-         {
 
-             Write((ushort)x);
 
-         }
 
-         private unsafe void WriteBufferBigEndian(byte[] dst, byte* src, int size)
 
-         {
 
-             System.Diagnostics.Debug.Assert(BitConverter.IsLittleEndian);
 
-             for(int i = 0; i < size; i++)
 
-             {
 
-                 dst[i] = src[size - i - 1];
 
-             }
 
-         }
 
-         public unsafe override void Write(ushort x)
 
-         {
 
-             if (Endian == EndianType.BigEndian)
 
-             {
 
-                 WriteBufferBigEndian(buffer, (byte*)&x, 2);
 
-                 Write(buffer, 0, 2);
 
-                 return;
 
-             }
 
-             base.Write(x);
 
-         }
 
-         public override void Write(int x)
 
-         {
 
-             Write((uint)x);
 
-         }
 
-         public unsafe override void Write(uint x)
 
-         {
 
-             if (Endian == EndianType.BigEndian)
 
-             {
 
-                 WriteBufferBigEndian(buffer, (byte*)&x, 4);
 
-                 Write(buffer, 0, 4);
 
-                 return;
 
-             }
 
-             base.Write(x);
 
-         }
 
-         public override void Write(long x)
 
-         {
 
-             Write((ulong)x);
 
-         }
 
-         public unsafe override void Write(ulong x)
 
-         {
 
-             if (Endian == EndianType.BigEndian)
 
-             {
 
-                 WriteBufferBigEndian(buffer, (byte*)&x, 8);
 
-                 Write(buffer, 0, 8);
 
-                 return;
 
-             }
 
-             base.Write(x);
 
-         }
 
-         public override void Write(float x)
 
-         {
 
-             if (Endian == EndianType.BigEndian)
 
-             {
 
-                 var buf = BitConverter.GetBytes(x);
 
-                 Array.Reverse(buf, 0, 4);
 
-                 Write(buf, 0, 4);
 
-                 return;
 
-             }
 
-             base.Write(x);
 
-         }
 
-         public override void Write(double x)
 
-         {
 
-             if (Endian == EndianType.BigEndian)
 
-             {
 
-                 var buf = BitConverter.GetBytes(x);
 
-                 Array.Reverse(buf, 0, 8);
 
-                 Write(buf, 0, 8);
 
-                 return;
 
-             }
 
-             base.Write(x);
 
-         }
 
-     }
 
- }
 
 
  |