IndieGame/client/Assets/Plugins/Easy Save 3/Scripts/Writers/ES3Binary.cs
DOBEST\zhaoyingjie f242607587 初始化工程
2024-10-11 10:12:15 +08:00

122 lines
4.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System;
namespace ES3Internal
{
internal enum ES3SpecialByte : byte
{
Null = 0,
Bool = 1,
Byte = 2,
Sbyte = 3,
Char = 4,
Decimal = 5,
Double = 6,
Float = 7,
Int = 8,
Uint = 9,
Long = 10,
Ulong = 11,
Short = 12,
Ushort = 13,
String = 14,
ByteArray = 15,
Collection = 128,
Dictionary = 129,
CollectionItem = 130,
Object = 254,
Terminator = 255
}
internal static class ES3Binary
{
internal const string ObjectTerminator = ".";
internal static readonly Dictionary<ES3SpecialByte, Type> IdToType = new Dictionary<ES3SpecialByte, Type>()
{
{ ES3SpecialByte.Null, null },
{ ES3SpecialByte.Bool, typeof(bool)},
{ ES3SpecialByte.Byte, typeof(byte)},
{ ES3SpecialByte.Sbyte, typeof(sbyte)},
{ ES3SpecialByte.Char, typeof(char)},
{ ES3SpecialByte.Decimal, typeof(decimal)},
{ ES3SpecialByte.Double, typeof(double)},
{ ES3SpecialByte.Float, typeof(float)},
{ ES3SpecialByte.Int, typeof(int)},
{ ES3SpecialByte.Uint, typeof(uint)},
{ ES3SpecialByte.Long, typeof(long)},
{ ES3SpecialByte.Ulong, typeof(ulong)},
{ ES3SpecialByte.Short, typeof(short)},
{ ES3SpecialByte.Ushort, typeof(ushort)},
{ ES3SpecialByte.String, typeof(string)},
{ ES3SpecialByte.ByteArray, typeof(byte[])}
};
internal static readonly Dictionary<Type, ES3SpecialByte> TypeToId = new Dictionary<Type, ES3SpecialByte>()
{
{ typeof(bool), ES3SpecialByte.Bool},
{ typeof(byte), ES3SpecialByte.Byte},
{ typeof(sbyte), ES3SpecialByte.Sbyte},
{ typeof(char), ES3SpecialByte.Char},
{ typeof(decimal), ES3SpecialByte.Decimal},
{ typeof(double), ES3SpecialByte.Double},
{ typeof(float), ES3SpecialByte.Float},
{ typeof(int), ES3SpecialByte.Int},
{ typeof(uint), ES3SpecialByte.Uint},
{ typeof(long), ES3SpecialByte.Long},
{ typeof(ulong), ES3SpecialByte.Ulong},
{ typeof(short), ES3SpecialByte.Short},
{ typeof(ushort), ES3SpecialByte.Ushort},
{ typeof(string), ES3SpecialByte.String},
{ typeof(byte[]), ES3SpecialByte.ByteArray}
};
internal static ES3SpecialByte TypeToByte(Type type)
{
ES3SpecialByte b;
if (TypeToId.TryGetValue(type, out b))
return b;
return ES3SpecialByte.Object;
}
internal static Type ByteToType(ES3SpecialByte b)
{
return ByteToType((byte)b);
}
internal static Type ByteToType(byte b)
{
Type type;
if (IdToType.TryGetValue((ES3SpecialByte)b, out type))
return type;
return typeof(object);
}
internal static bool IsPrimitive(ES3SpecialByte b)
{
switch(b)
{
case ES3SpecialByte.Bool:
case ES3SpecialByte.Byte:
case ES3SpecialByte.Sbyte:
case ES3SpecialByte.Char:
case ES3SpecialByte.Decimal:
case ES3SpecialByte.Double:
case ES3SpecialByte.Float:
case ES3SpecialByte.Int:
case ES3SpecialByte.Uint:
case ES3SpecialByte.Long:
case ES3SpecialByte.Ulong:
case ES3SpecialByte.Short:
case ES3SpecialByte.Ushort:
case ES3SpecialByte.String:
case ES3SpecialByte.ByteArray:
return true;
default:
return false;
}
}
}
}