122 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			4.3 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;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |