update utility

pull/62/head
hevinci 2022-12-04 20:14:02 +08:00
parent 2687466ed4
commit 5bf1d29edc
4 changed files with 63 additions and 226 deletions

View File

@ -1,22 +0,0 @@
using System.Runtime.InteropServices;
namespace YooAsset
{
[StructLayout(LayoutKind.Explicit)]
internal struct DoubleContent
{
[FieldOffset(0)]
public double doubleValue;
[FieldOffset(0)]
public ulong ulongValue;
}
[StructLayout(LayoutKind.Explicit)]
internal struct FloatContent
{
[FieldOffset(0)]
public float floatValue;
[FieldOffset(0)]
public uint uintValue;
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: d89dfb0a9c98df548aa15f76dc8c2ac0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -3,7 +3,6 @@ using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using System.Diagnostics; using System.Diagnostics;
using UnityEngine;
namespace YooAsset namespace YooAsset
{ {
@ -38,10 +37,6 @@ namespace YooAsset
CheckReaderIndex(1); CheckReaderIndex(1);
return _buffer[_index++]; return _buffer[_index++];
} }
public sbyte ReadSbyte()
{
return (sbyte)ReadByte();
}
public bool ReadBool() public bool ReadBool()
{ {
@ -50,60 +45,65 @@ namespace YooAsset
} }
public short ReadInt16() public short ReadInt16()
{ {
return (short)ReadUInt16(); CheckReaderIndex(2);
if (BitConverter.IsLittleEndian)
{
short value = (short)((_buffer[_index]) | (_buffer[_index + 1] << 8));
_index += 2;
return value;
}
else
{
short value = (short)((_buffer[_index] << 8) | (_buffer[_index + 1]));
_index += 2;
return value;
}
} }
public ushort ReadUInt16() public ushort ReadUInt16()
{ {
CheckReaderIndex(2); return (ushort)ReadInt16();
ushort value = 0;
for (int i = 0; i < 2; i++)
{
value += (ushort)(_buffer[_index++] << (i * 8));
}
return value;
} }
public int ReadInt32() public int ReadInt32()
{ {
return (int)ReadUInt32(); CheckReaderIndex(4);
if (BitConverter.IsLittleEndian)
{
int value = (_buffer[_index]) | (_buffer[_index + 1] << 8) | (_buffer[_index + 2] << 16) | (_buffer[_index + 3] << 24);
_index += 4;
return value;
}
else
{
int value = (_buffer[_index] << 24) | (_buffer[_index + 1] << 16) | (_buffer[_index + 2] << 8) | (_buffer[_index + 3]);
_index += 4;
return value;
}
} }
public uint ReadUInt32() public uint ReadUInt32()
{ {
CheckReaderIndex(4); return (uint)ReadInt32();
uint value = 0;
for (int i = 0; i < 4; i++)
{
value += (uint)(_buffer[_index++] << (i * 8));
}
return value;
} }
public long ReadInt64() public long ReadInt64()
{ {
return (long)ReadUInt64(); CheckReaderIndex(8);
if (BitConverter.IsLittleEndian)
{
int i1 = (_buffer[_index]) | (_buffer[_index + 1] << 8) | (_buffer[_index + 2] << 16) | (_buffer[_index + 3] << 24);
int i2 = (_buffer[_index + 4]) | (_buffer[_index + 5] << 8) | (_buffer[_index + 6] << 16) | (_buffer[_index + 7] << 24);
_index += 8;
return (uint)i1 | ((long)i2 << 32);
}
else
{
int i1 = (_buffer[_index] << 24) | (_buffer[_index + 1] << 16) | (_buffer[_index + 2] << 8) | (_buffer[_index + 3]);
int i2 = (_buffer[_index + 4] << 24) | (_buffer[_index + 5] << 16) | (_buffer[_index + 6] << 8) | (_buffer[_index + 7]);
_index += 8;
return (uint)i2 | ((long)i1 << 32);
}
} }
public ulong ReadUInt64() public ulong ReadUInt64()
{ {
CheckReaderIndex(8); return (ulong)ReadInt64();
ulong value = 0;
for (int i = 0; i < 8; i++)
{
value += (ulong)(_buffer[_index++] << (i * 8));
}
return value;
}
public float ReadSingle()
{
CheckReaderIndex(4);
FloatContent content = new FloatContent();
content.uintValue = ReadUInt32();
return content.floatValue;
}
public double ReadDouble()
{
CheckReaderIndex(8);
DoubleContent content = new DoubleContent();
content.ulongValue = ReadUInt64();
return content.doubleValue;
} }
public string ReadUTF8() public string ReadUTF8()
@ -137,26 +137,6 @@ namespace YooAsset
} }
return values; return values;
} }
public float[] ReadFloatArray()
{
ushort count = ReadUInt16();
float[] values = new float[count];
for (int i = 0; i < count; i++)
{
values[i] = ReadSingle();
}
return values;
}
public double[] ReadDoubleArray()
{
ushort count = ReadUInt16();
double[] values = new double[count];
for (int i = 0; i < count; i++)
{
values[i] = ReadDouble();
}
return values;
}
public string[] ReadUTF8Array() public string[] ReadUTF8Array()
{ {
ushort count = ReadUInt16(); ushort count = ReadUInt16();
@ -168,36 +148,6 @@ namespace YooAsset
return values; return values;
} }
public Vector2 ReadVector2()
{
float x = ReadSingle();
float y = ReadSingle();
return new Vector2(x, y);
}
public Vector3 ReadVector3()
{
float x = ReadSingle();
float y = ReadSingle();
float z = ReadSingle();
return new Vector3(x, y, z);
}
public Vector4 ReadVector4()
{
float x = ReadSingle();
float y = ReadSingle();
float z = ReadSingle();
float w = ReadSingle();
return new Vector4(x, y, z, w);
}
public Quaternion ReadQuaternion()
{
float x = ReadSingle();
float y = ReadSingle();
float z = ReadSingle();
float w = ReadSingle();
return new Quaternion(x, y, z, w);
}
[Conditional("DEBUG")] [Conditional("DEBUG")]
private void CheckReaderIndex(int length) private void CheckReaderIndex(int length)
{ {

View File

@ -4,10 +4,12 @@ using System.Collections.Generic;
using System.Text; using System.Text;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using UnityEngine;
namespace YooAsset namespace YooAsset
{ {
/// <summary>
/// 数据存储以小端字节序为标准
/// </summary>
internal class BufferWriter internal class BufferWriter
{ {
private readonly byte[] _buffer; private readonly byte[] _buffer;
@ -36,12 +38,9 @@ namespace YooAsset
public void WriteBytes(byte[] data) public void WriteBytes(byte[] data)
{ {
WriteBytes(data, 0, data.Length); int count = data.Length;
}
public void WriteBytes(byte[] data, int offset, int count)
{
CheckWriterIndex(count); CheckWriterIndex(count);
Buffer.BlockCopy(data, offset, _buffer, _index, count); Buffer.BlockCopy(data, 0, _buffer, _index, count);
_index += count; _index += count;
} }
public void WriteByte(byte value) public void WriteByte(byte value)
@ -49,10 +48,6 @@ namespace YooAsset
CheckWriterIndex(1); CheckWriterIndex(1);
_buffer[_index++] = value; _buffer[_index++] = value;
} }
public void WriteSbyte(sbyte value)
{
WriteByte((byte)value);
}
public void WriteBool(bool value) public void WriteBool(bool value)
{ {
@ -65,10 +60,8 @@ namespace YooAsset
public void WriteUInt16(ushort value) public void WriteUInt16(ushort value)
{ {
CheckWriterIndex(2); CheckWriterIndex(2);
for (int i = 0; i < 2; i++) _buffer[_index++] = (byte)value;
{ _buffer[_index++] = (byte)(value >> 8);
_buffer[_index++] = (byte)(value >> (i * 8));
}
} }
public void WriteInt32(int value) public void WriteInt32(int value)
{ {
@ -77,10 +70,10 @@ namespace YooAsset
public void WriteUInt32(uint value) public void WriteUInt32(uint value)
{ {
CheckWriterIndex(4); CheckWriterIndex(4);
for (int i = 0; i < 4; i++) _buffer[_index++] = (byte)value;
{ _buffer[_index++] = (byte)(value >> 8);
_buffer[_index++] = (byte)(value >> (i * 8)); _buffer[_index++] = (byte)(value >> 16);
} _buffer[_index++] = (byte)(value >> 24);
} }
public void WriteInt64(long value) public void WriteInt64(long value)
{ {
@ -89,23 +82,14 @@ namespace YooAsset
public void WriteUInt64(ulong value) public void WriteUInt64(ulong value)
{ {
CheckWriterIndex(8); CheckWriterIndex(8);
for (int i = 0; i < 8; i++) _buffer[_index++] = (byte)value;
{ _buffer[_index++] = (byte)(value >> 8);
_buffer[_index++] = (byte)(value >> (i * 8)); _buffer[_index++] = (byte)(value >> 16);
} _buffer[_index++] = (byte)(value >> 24);
} _buffer[_index++] = (byte)(value >> 32);
_buffer[_index++] = (byte)(value >> 40);
public void WriteSingle(float value) _buffer[_index++] = (byte)(value >> 48);
{ _buffer[_index++] = (byte)(value >> 56);
FloatContent content = new FloatContent();
content.floatValue = value;
WriteUInt32(content.uintValue);
}
public void WriteDouble(double value)
{
DoubleContent content = new DoubleContent();
content.doubleValue = value;
WriteUInt64(content.ulongValue);
} }
public void WriteUTF8(string value) public void WriteUTF8(string value)
@ -163,44 +147,6 @@ namespace YooAsset
} }
} }
} }
public void WriteSingleArray(float[] values)
{
if (values == null)
{
WriteUInt16(0);
}
else
{
int count = values.Length;
if (count > ushort.MaxValue)
throw new FormatException($"Write array length cannot be greater than {ushort.MaxValue} !");
WriteUInt16(Convert.ToUInt16(count));
for (int i = 0; i < count; i++)
{
WriteSingle(values[i]);
}
}
}
public void WriteDoubleArray(double[] values)
{
if (values == null)
{
WriteUInt16(0);
}
else
{
int count = values.Length;
if (count > ushort.MaxValue)
throw new FormatException($"Write array length cannot be greater than {ushort.MaxValue} !");
WriteUInt16(Convert.ToUInt16(count));
for (int i = 0; i < count; i++)
{
WriteDouble(values[i]);
}
}
}
public void WriteUTF8Array(string[] values) public void WriteUTF8Array(string[] values)
{ {
if (values == null) if (values == null)
@ -221,32 +167,6 @@ namespace YooAsset
} }
} }
public void WriteVector2(Vector2 value)
{
WriteSingle(value.x);
WriteSingle(value.y);
}
public void WriteVector3(Vector3 value)
{
WriteSingle(value.x);
WriteSingle(value.y);
WriteSingle(value.z);
}
public void WriteVector4(Vector4 value)
{
WriteSingle(value.x);
WriteSingle(value.y);
WriteSingle(value.z);
WriteSingle(value.w);
}
public void WriteQuaternion(Quaternion value)
{
WriteSingle(value.x);
WriteSingle(value.y);
WriteSingle(value.z);
WriteSingle(value.w);
}
[Conditional("DEBUG")] [Conditional("DEBUG")]
private void CheckWriterIndex(int length) private void CheckWriterIndex(int length)
{ {