mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-05-10 04:31:43 -05:00
754 lines
39 KiB
C#
754 lines
39 KiB
C#
using System;
|
|
using System.Text;
|
|
|
|
namespace UniJSON
|
|
{
|
|
public struct MsgPackValue: IListTreeItem, IValue<MsgPackValue>
|
|
{
|
|
public int ParentIndex
|
|
{
|
|
get;
|
|
private set;
|
|
}
|
|
|
|
public ArraySegment<Byte> Bytes
|
|
{
|
|
get;
|
|
private set;
|
|
}
|
|
|
|
public MsgPackType Format
|
|
{
|
|
get
|
|
{
|
|
return (MsgPackType)Bytes.Get(0);
|
|
}
|
|
}
|
|
|
|
public ValueNodeType ValueType
|
|
{
|
|
get
|
|
{
|
|
switch (Format)
|
|
{
|
|
case MsgPackType.NIL:
|
|
return ValueNodeType.Null;
|
|
|
|
case MsgPackType.TRUE:
|
|
case MsgPackType.FALSE:
|
|
return ValueNodeType.Boolean;
|
|
|
|
default:
|
|
if (Format.IsArray())
|
|
{
|
|
return ValueNodeType.Array;
|
|
}
|
|
else if (Format.IsMap())
|
|
{
|
|
return ValueNodeType.Object;
|
|
}
|
|
else if (Format.IsInteger())
|
|
{
|
|
return ValueNodeType.Integer;
|
|
}
|
|
else if (Format.IsFloat())
|
|
{
|
|
return ValueNodeType.Number;
|
|
}
|
|
else if (Format.IsString())
|
|
{
|
|
return ValueNodeType.String;
|
|
}
|
|
else if (Format.IsBinary())
|
|
{
|
|
return ValueNodeType.Binary;
|
|
}
|
|
else
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public MsgPackValue(ArraySegment<Byte> segment, int parentIndex) : this()
|
|
{
|
|
Bytes = segment;
|
|
ParentIndex = parentIndex;
|
|
}
|
|
|
|
public MsgPackValue New(ArraySegment<byte> bytes, ValueNodeType valueType, int parentIndex)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public MsgPackValue Key(Utf8String key, int parentIndex)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
/// <summary>
|
|
/// ArrayとMap以外のタイプのペイロードを得る
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public ArraySegment<Byte> GetBody()
|
|
{
|
|
var bytes = Bytes;
|
|
var formatType = Format;
|
|
switch (formatType)
|
|
{
|
|
case MsgPackType.FIX_STR: return bytes.Advance(1).Take(0);
|
|
case MsgPackType.FIX_STR_0x01: return bytes.Advance(1).Take(1);
|
|
case MsgPackType.FIX_STR_0x02: return bytes.Advance(1).Take(2);
|
|
case MsgPackType.FIX_STR_0x03: return bytes.Advance(1).Take(3);
|
|
case MsgPackType.FIX_STR_0x04: return bytes.Advance(1).Take(4);
|
|
case MsgPackType.FIX_STR_0x05: return bytes.Advance(1).Take(5);
|
|
case MsgPackType.FIX_STR_0x06: return bytes.Advance(1).Take(6);
|
|
case MsgPackType.FIX_STR_0x07: return bytes.Advance(1).Take(7);
|
|
case MsgPackType.FIX_STR_0x08: return bytes.Advance(1).Take(8);
|
|
case MsgPackType.FIX_STR_0x09: return bytes.Advance(1).Take(9);
|
|
case MsgPackType.FIX_STR_0x0A: return bytes.Advance(1).Take(10);
|
|
case MsgPackType.FIX_STR_0x0B: return bytes.Advance(1).Take(11);
|
|
case MsgPackType.FIX_STR_0x0C: return bytes.Advance(1).Take(12);
|
|
case MsgPackType.FIX_STR_0x0D: return bytes.Advance(1).Take(13);
|
|
case MsgPackType.FIX_STR_0x0E: return bytes.Advance(1).Take(14);
|
|
case MsgPackType.FIX_STR_0x0F: return bytes.Advance(1).Take(15);
|
|
|
|
case MsgPackType.FIX_STR_0x10: return bytes.Advance(1).Take(16);
|
|
case MsgPackType.FIX_STR_0x11: return bytes.Advance(1).Take(17);
|
|
case MsgPackType.FIX_STR_0x12: return bytes.Advance(1).Take(18);
|
|
case MsgPackType.FIX_STR_0x13: return bytes.Advance(1).Take(19);
|
|
case MsgPackType.FIX_STR_0x14: return bytes.Advance(1).Take(20);
|
|
case MsgPackType.FIX_STR_0x15: return bytes.Advance(1).Take(21);
|
|
case MsgPackType.FIX_STR_0x16: return bytes.Advance(1).Take(22);
|
|
case MsgPackType.FIX_STR_0x17: return bytes.Advance(1).Take(23);
|
|
case MsgPackType.FIX_STR_0x18: return bytes.Advance(1).Take(24);
|
|
case MsgPackType.FIX_STR_0x19: return bytes.Advance(1).Take(25);
|
|
case MsgPackType.FIX_STR_0x1A: return bytes.Advance(1).Take(26);
|
|
case MsgPackType.FIX_STR_0x1B: return bytes.Advance(1).Take(27);
|
|
case MsgPackType.FIX_STR_0x1C: return bytes.Advance(1).Take(28);
|
|
case MsgPackType.FIX_STR_0x1D: return bytes.Advance(1).Take(29);
|
|
case MsgPackType.FIX_STR_0x1E: return bytes.Advance(1).Take(30);
|
|
case MsgPackType.FIX_STR_0x1F: return bytes.Advance(1).Take(31);
|
|
|
|
case MsgPackType.STR8:
|
|
case MsgPackType.BIN8:
|
|
{
|
|
var count = bytes.Get(1);
|
|
return bytes.Advance(1 + 1).Take(count);
|
|
}
|
|
|
|
case MsgPackType.STR16:
|
|
case MsgPackType.BIN16:
|
|
{
|
|
var count = EndianConverter.NetworkByteWordToUnsignedNativeByteOrder(bytes.Advance(1));
|
|
return bytes.Advance(1 + 2).Take(count);
|
|
}
|
|
|
|
case MsgPackType.STR32:
|
|
case MsgPackType.BIN32:
|
|
{
|
|
var count = EndianConverter.NetworkByteDWordToUnsignedNativeByteOrder(bytes.Advance(1));
|
|
return bytes.Advance(1 + 4).Take((int)count);
|
|
}
|
|
|
|
case MsgPackType.NIL:
|
|
case MsgPackType.TRUE:
|
|
case MsgPackType.FALSE:
|
|
case MsgPackType.POSITIVE_FIXNUM:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x01:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x02:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x03:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x04:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x05:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x06:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x07:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x08:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x09:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x0A:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x0B:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x0C:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x0D:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x0E:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x0F:
|
|
|
|
case MsgPackType.POSITIVE_FIXNUM_0x10:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x11:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x12:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x13:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x14:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x15:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x16:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x17:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x18:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x19:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x1A:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x1B:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x1C:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x1D:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x1E:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x1F:
|
|
|
|
case MsgPackType.POSITIVE_FIXNUM_0x20:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x21:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x22:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x23:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x24:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x25:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x26:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x27:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x28:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x29:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x2A:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x2B:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x2C:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x2D:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x2E:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x2F:
|
|
|
|
case MsgPackType.POSITIVE_FIXNUM_0x30:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x31:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x32:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x33:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x34:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x35:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x36:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x37:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x38:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x39:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x3A:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x3B:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x3C:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x3D:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x3E:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x3F:
|
|
|
|
case MsgPackType.POSITIVE_FIXNUM_0x40:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x41:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x42:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x43:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x44:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x45:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x46:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x47:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x48:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x49:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x4A:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x4B:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x4C:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x4D:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x4E:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x4F:
|
|
|
|
case MsgPackType.POSITIVE_FIXNUM_0x50:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x51:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x52:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x53:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x54:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x55:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x56:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x57:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x58:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x59:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x5A:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x5B:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x5C:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x5D:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x5E:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x5F:
|
|
|
|
case MsgPackType.POSITIVE_FIXNUM_0x60:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x61:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x62:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x63:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x64:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x65:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x66:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x67:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x68:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x69:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x6A:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x6B:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x6C:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x6D:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x6E:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x6F:
|
|
|
|
case MsgPackType.POSITIVE_FIXNUM_0x70:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x71:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x72:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x73:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x74:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x75:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x76:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x77:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x78:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x79:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x7A:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x7B:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x7C:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x7D:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x7E:
|
|
case MsgPackType.POSITIVE_FIXNUM_0x7F:
|
|
|
|
case MsgPackType.NEGATIVE_FIXNUM:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x01:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x02:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x03:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x04:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x05:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x06:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x07:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x08:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x09:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x0A:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x0B:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x0C:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x0D:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x0E:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x0F:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x10:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x11:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x12:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x13:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x14:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x15:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x16:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x17:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x18:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x19:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x1A:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x1B:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x1C:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x1D:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x1E:
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x1F:
|
|
return bytes.Advance(1).Take(0);
|
|
|
|
case MsgPackType.UINT8:
|
|
case MsgPackType.INT8:
|
|
return bytes.Advance(1).Take(1);
|
|
|
|
case MsgPackType.UINT16:
|
|
case MsgPackType.INT16:
|
|
return bytes.Advance(1).Take(2);
|
|
|
|
case MsgPackType.UINT32:
|
|
case MsgPackType.INT32:
|
|
case MsgPackType.FLOAT:
|
|
return bytes.Advance(1).Take(4);
|
|
|
|
case MsgPackType.UINT64:
|
|
case MsgPackType.INT64:
|
|
case MsgPackType.DOUBLE:
|
|
return bytes.Advance(1).Take(8);
|
|
|
|
case MsgPackType.FIX_EXT_1:
|
|
return bytes.Advance(2).Take(1);
|
|
case MsgPackType.FIX_EXT_2:
|
|
return bytes.Advance(2).Take(2);
|
|
case MsgPackType.FIX_EXT_4:
|
|
return bytes.Advance(2).Take(4);
|
|
case MsgPackType.FIX_EXT_8:
|
|
return bytes.Advance(2).Take(8);
|
|
case MsgPackType.FIX_EXT_16:
|
|
return bytes.Advance(2).Take(16);
|
|
case MsgPackType.EXT8:
|
|
{
|
|
var count = bytes.Get(1);
|
|
return bytes.Advance(1 + 1 + 1).Take(count);
|
|
}
|
|
case MsgPackType.EXT16:
|
|
{
|
|
var count = EndianConverter.NetworkByteWordToUnsignedNativeByteOrder(bytes.Advance(1));
|
|
return bytes.Advance(1 + 2 + 1).Take(count);
|
|
}
|
|
case MsgPackType.EXT32:
|
|
{
|
|
var count = EndianConverter.NetworkByteDWordToUnsignedNativeByteOrder(bytes.Advance(1));
|
|
return bytes.Advance(1 + 4 + 1).Take((int)count);
|
|
}
|
|
default:
|
|
throw new ArgumentException("unknown type: " + formatType);
|
|
}
|
|
}
|
|
|
|
public SByte GetExtType()
|
|
{
|
|
var formatType = Format;
|
|
switch (formatType)
|
|
{
|
|
case MsgPackType.FIX_EXT_4:
|
|
return (SByte)Bytes.Get(1);
|
|
}
|
|
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
/// <summary>
|
|
/// ArrayとMap以外のタイプの値を得る
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public T GetValue<T>()
|
|
{
|
|
var formatType = Format;
|
|
switch (formatType)
|
|
{
|
|
case MsgPackType.NIL: return GenericCast<object, T>.Null();
|
|
case MsgPackType.TRUE: return GenericCast<bool, T>.Const(true)();
|
|
case MsgPackType.FALSE: return GenericCast<bool, T>.Const(false)();
|
|
case MsgPackType.POSITIVE_FIXNUM: return GenericCast<int, T>.Const(0)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x01: return GenericCast<int, T>.Const(1)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x02: return GenericCast<int, T>.Const(2)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x03: return GenericCast<int, T>.Const(3)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x04: return GenericCast<int, T>.Const(4)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x05: return GenericCast<int, T>.Const(5)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x06: return GenericCast<int, T>.Const(6)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x07: return GenericCast<int, T>.Const(7)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x08: return GenericCast<int, T>.Const(8)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x09: return GenericCast<int, T>.Const(9)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x0A: return GenericCast<int, T>.Const(10)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x0B: return GenericCast<int, T>.Const(11)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x0C: return GenericCast<int, T>.Const(12)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x0D: return GenericCast<int, T>.Const(13)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x0E: return GenericCast<int, T>.Const(14)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x0F: return GenericCast<int, T>.Const(15)();
|
|
|
|
case MsgPackType.POSITIVE_FIXNUM_0x10: return GenericCast<int, T>.Const(16)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x11: return GenericCast<int, T>.Const(17)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x12: return GenericCast<int, T>.Const(18)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x13: return GenericCast<int, T>.Const(19)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x14: return GenericCast<int, T>.Const(20)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x15: return GenericCast<int, T>.Const(21)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x16: return GenericCast<int, T>.Const(22)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x17: return GenericCast<int, T>.Const(23)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x18: return GenericCast<int, T>.Const(24)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x19: return GenericCast<int, T>.Const(25)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x1A: return GenericCast<int, T>.Const(26)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x1B: return GenericCast<int, T>.Const(27)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x1C: return GenericCast<int, T>.Const(28)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x1D: return GenericCast<int, T>.Const(29)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x1E: return GenericCast<int, T>.Const(30)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x1F: return GenericCast<int, T>.Const(31)();
|
|
|
|
case MsgPackType.POSITIVE_FIXNUM_0x20: return GenericCast<int, T>.Const(32)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x21: return GenericCast<int, T>.Const(33)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x22: return GenericCast<int, T>.Const(34)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x23: return GenericCast<int, T>.Const(35)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x24: return GenericCast<int, T>.Const(36)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x25: return GenericCast<int, T>.Const(37)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x26: return GenericCast<int, T>.Const(38)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x27: return GenericCast<int, T>.Const(39)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x28: return GenericCast<int, T>.Const(40)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x29: return GenericCast<int, T>.Const(41)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x2A: return GenericCast<int, T>.Const(42)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x2B: return GenericCast<int, T>.Const(43)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x2C: return GenericCast<int, T>.Const(44)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x2D: return GenericCast<int, T>.Const(45)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x2E: return GenericCast<int, T>.Const(46)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x2F: return GenericCast<int, T>.Const(47)();
|
|
|
|
case MsgPackType.POSITIVE_FIXNUM_0x30: return GenericCast<int, T>.Const(48)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x31: return GenericCast<int, T>.Const(49)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x32: return GenericCast<int, T>.Const(50)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x33: return GenericCast<int, T>.Const(51)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x34: return GenericCast<int, T>.Const(52)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x35: return GenericCast<int, T>.Const(53)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x36: return GenericCast<int, T>.Const(54)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x37: return GenericCast<int, T>.Const(55)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x38: return GenericCast<int, T>.Const(56)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x39: return GenericCast<int, T>.Const(57)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x3A: return GenericCast<int, T>.Const(58)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x3B: return GenericCast<int, T>.Const(59)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x3C: return GenericCast<int, T>.Const(60)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x3D: return GenericCast<int, T>.Const(61)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x3E: return GenericCast<int, T>.Const(62)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x3F: return GenericCast<int, T>.Const(63)();
|
|
|
|
case MsgPackType.POSITIVE_FIXNUM_0x40: return GenericCast<int, T>.Const(64)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x41: return GenericCast<int, T>.Const(65)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x42: return GenericCast<int, T>.Const(66)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x43: return GenericCast<int, T>.Const(67)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x44: return GenericCast<int, T>.Const(68)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x45: return GenericCast<int, T>.Const(69)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x46: return GenericCast<int, T>.Const(70)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x47: return GenericCast<int, T>.Const(71)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x48: return GenericCast<int, T>.Const(72)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x49: return GenericCast<int, T>.Const(73)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x4A: return GenericCast<int, T>.Const(74)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x4B: return GenericCast<int, T>.Const(75)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x4C: return GenericCast<int, T>.Const(76)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x4D: return GenericCast<int, T>.Const(77)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x4E: return GenericCast<int, T>.Const(78)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x4F: return GenericCast<int, T>.Const(79)();
|
|
|
|
case MsgPackType.POSITIVE_FIXNUM_0x50: return GenericCast<int, T>.Const(80)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x51: return GenericCast<int, T>.Const(81)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x52: return GenericCast<int, T>.Const(82)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x53: return GenericCast<int, T>.Const(83)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x54: return GenericCast<int, T>.Const(84)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x55: return GenericCast<int, T>.Const(85)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x56: return GenericCast<int, T>.Const(86)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x57: return GenericCast<int, T>.Const(87)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x58: return GenericCast<int, T>.Const(88)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x59: return GenericCast<int, T>.Const(89)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x5A: return GenericCast<int, T>.Const(90)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x5B: return GenericCast<int, T>.Const(91)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x5C: return GenericCast<int, T>.Const(92)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x5D: return GenericCast<int, T>.Const(93)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x5E: return GenericCast<int, T>.Const(94)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x5F: return GenericCast<int, T>.Const(95)();
|
|
|
|
case MsgPackType.POSITIVE_FIXNUM_0x60: return GenericCast<int, T>.Const(96)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x61: return GenericCast<int, T>.Const(97)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x62: return GenericCast<int, T>.Const(98)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x63: return GenericCast<int, T>.Const(99)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x64: return GenericCast<int, T>.Const(100)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x65: return GenericCast<int, T>.Const(101)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x66: return GenericCast<int, T>.Const(102)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x67: return GenericCast<int, T>.Const(103)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x68: return GenericCast<int, T>.Const(104)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x69: return GenericCast<int, T>.Const(105)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x6A: return GenericCast<int, T>.Const(106)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x6B: return GenericCast<int, T>.Const(107)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x6C: return GenericCast<int, T>.Const(108)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x6D: return GenericCast<int, T>.Const(109)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x6E: return GenericCast<int, T>.Const(110)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x6F: return GenericCast<int, T>.Const(111)();
|
|
|
|
case MsgPackType.POSITIVE_FIXNUM_0x70: return GenericCast<int, T>.Const(112)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x71: return GenericCast<int, T>.Const(113)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x72: return GenericCast<int, T>.Const(114)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x73: return GenericCast<int, T>.Const(115)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x74: return GenericCast<int, T>.Const(116)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x75: return GenericCast<int, T>.Const(117)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x76: return GenericCast<int, T>.Const(118)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x77: return GenericCast<int, T>.Const(119)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x78: return GenericCast<int, T>.Const(120)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x79: return GenericCast<int, T>.Const(121)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x7A: return GenericCast<int, T>.Const(122)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x7B: return GenericCast<int, T>.Const(123)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x7C: return GenericCast<int, T>.Const(124)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x7D: return GenericCast<int, T>.Const(125)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x7E: return GenericCast<int, T>.Const(126)();
|
|
case MsgPackType.POSITIVE_FIXNUM_0x7F: return GenericCast<int, T>.Const(127)();
|
|
|
|
case MsgPackType.NEGATIVE_FIXNUM: return GenericCast<int, T>.Const(-32)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x01: return GenericCast<int, T>.Const(-1)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x02: return GenericCast<int, T>.Const(-2)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x03: return GenericCast<int, T>.Const(-3)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x04: return GenericCast<int, T>.Const(-4)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x05: return GenericCast<int, T>.Const(-5)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x06: return GenericCast<int, T>.Const(-6)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x07: return GenericCast<int, T>.Const(-7)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x08: return GenericCast<int, T>.Const(-8)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x09: return GenericCast<int, T>.Const(-9)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x0A: return GenericCast<int, T>.Const(-10)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x0B: return GenericCast<int, T>.Const(-11)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x0C: return GenericCast<int, T>.Const(-12)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x0D: return GenericCast<int, T>.Const(-13)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x0E: return GenericCast<int, T>.Const(-14)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x0F: return GenericCast<int, T>.Const(-15)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x10: return GenericCast<int, T>.Const(-16)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x11: return GenericCast<int, T>.Const(-17)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x12: return GenericCast<int, T>.Const(-18)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x13: return GenericCast<int, T>.Const(-19)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x14: return GenericCast<int, T>.Const(-20)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x15: return GenericCast<int, T>.Const(-21)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x16: return GenericCast<int, T>.Const(-22)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x17: return GenericCast<int, T>.Const(-23)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x18: return GenericCast<int, T>.Const(-24)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x19: return GenericCast<int, T>.Const(-25)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x1A: return GenericCast<int, T>.Const(-26)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x1B: return GenericCast<int, T>.Const(-27)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x1C: return GenericCast<int, T>.Const(-28)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x1D: return GenericCast<int, T>.Const(-29)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x1E: return GenericCast<int, T>.Const(-30)();
|
|
case MsgPackType.NEGATIVE_FIXNUM_0x1F: return GenericCast<int, T>.Const(-31)();
|
|
|
|
case MsgPackType.INT8: return GenericCast<SByte, T>.Cast((SByte)GetBody().Get(0));
|
|
case MsgPackType.INT16: return GenericCast<short, T>.Cast(EndianConverter.NetworkByteWordToSignedNativeByteOrder(GetBody()));
|
|
case MsgPackType.INT32: return GenericCast<int, T>.Cast(EndianConverter.NetworkByteDWordToSignedNativeByteOrder(GetBody()));
|
|
case MsgPackType.INT64: return GenericCast<long, T>.Cast(EndianConverter.NetworkByteQWordToSignedNativeByteOrder(GetBody()));
|
|
case MsgPackType.UINT8: return GenericCast<Byte, T>.Cast(GetBody().Get(0));
|
|
case MsgPackType.UINT16: return GenericCast<ushort, T>.Cast(EndianConverter.NetworkByteWordToUnsignedNativeByteOrder(GetBody()));
|
|
case MsgPackType.UINT32: return GenericCast<uint, T>.Cast(EndianConverter.NetworkByteDWordToUnsignedNativeByteOrder(GetBody()));
|
|
case MsgPackType.UINT64: return GenericCast<ulong, T>.Cast(EndianConverter.NetworkByteQWordToUnsignedNativeByteOrder(GetBody()));
|
|
case MsgPackType.FLOAT: return GenericCast<float, T>.Cast(EndianConverter.NetworkByteDWordToFloatNativeByteOrder(GetBody()));
|
|
case MsgPackType.DOUBLE: return GenericCast<double, T>.Cast(EndianConverter.NetworkByteQWordToFloatNativeByteOrder(GetBody()));
|
|
|
|
case MsgPackType.FIX_STR: return GenericCast<string, T>.Const("")();
|
|
case MsgPackType.FIX_STR_0x01:
|
|
case MsgPackType.FIX_STR_0x02:
|
|
case MsgPackType.FIX_STR_0x03:
|
|
case MsgPackType.FIX_STR_0x04:
|
|
case MsgPackType.FIX_STR_0x05:
|
|
case MsgPackType.FIX_STR_0x06:
|
|
case MsgPackType.FIX_STR_0x07:
|
|
case MsgPackType.FIX_STR_0x08:
|
|
case MsgPackType.FIX_STR_0x09:
|
|
case MsgPackType.FIX_STR_0x0A:
|
|
case MsgPackType.FIX_STR_0x0B:
|
|
case MsgPackType.FIX_STR_0x0C:
|
|
case MsgPackType.FIX_STR_0x0D:
|
|
case MsgPackType.FIX_STR_0x0E:
|
|
case MsgPackType.FIX_STR_0x0F:
|
|
case MsgPackType.FIX_STR_0x10:
|
|
case MsgPackType.FIX_STR_0x11:
|
|
case MsgPackType.FIX_STR_0x12:
|
|
case MsgPackType.FIX_STR_0x13:
|
|
case MsgPackType.FIX_STR_0x14:
|
|
case MsgPackType.FIX_STR_0x15:
|
|
case MsgPackType.FIX_STR_0x16:
|
|
case MsgPackType.FIX_STR_0x17:
|
|
case MsgPackType.FIX_STR_0x18:
|
|
case MsgPackType.FIX_STR_0x19:
|
|
case MsgPackType.FIX_STR_0x1A:
|
|
case MsgPackType.FIX_STR_0x1B:
|
|
case MsgPackType.FIX_STR_0x1C:
|
|
case MsgPackType.FIX_STR_0x1D:
|
|
case MsgPackType.FIX_STR_0x1E:
|
|
case MsgPackType.FIX_STR_0x1F:
|
|
case MsgPackType.STR8:
|
|
case MsgPackType.STR16:
|
|
case MsgPackType.STR32:
|
|
{
|
|
var body = GetBody();
|
|
var str = Encoding.UTF8.GetString(body.Array, body.Offset, body.Count);
|
|
return GenericCast<string, T>.Cast(str);
|
|
}
|
|
|
|
case MsgPackType.BIN8:
|
|
case MsgPackType.BIN16:
|
|
case MsgPackType.BIN32:
|
|
{
|
|
var body = GetBody();
|
|
return GenericCast<ArraySegment<Byte>, T>.Cast(body);
|
|
}
|
|
|
|
case MsgPackType.FIX_EXT_4:
|
|
{
|
|
if (GetExtType() == -1)
|
|
{
|
|
var unixtime = EndianConverter.NetworkByteDWordToUnsignedNativeByteOrder(GetBody());
|
|
var dt = new DateTimeOffset(unixtime * DateTimeOffsetExtensions.TicksPerSecond + DateTimeOffsetExtensions.EpochTime.Ticks, TimeSpan.Zero);
|
|
return GenericCast<DateTimeOffset, T>.Cast(dt);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
throw new ArgumentException("GetValue to array or map: " + formatType);
|
|
}
|
|
|
|
public bool GetBoolean()
|
|
{
|
|
switch (Format)
|
|
{
|
|
case MsgPackType.TRUE: return true;
|
|
case MsgPackType.FALSE: return false;
|
|
default: throw new MsgPackTypeException("Not boolean");
|
|
}
|
|
}
|
|
|
|
public ArraySegment<Byte> GetBytes()
|
|
{
|
|
if (!Format.IsBinary())
|
|
{
|
|
throw new MsgPackTypeException("Not bin");
|
|
}
|
|
return GetBody();
|
|
}
|
|
|
|
public string GetString()
|
|
{
|
|
if (!Format.IsString())
|
|
{
|
|
throw new MsgPackTypeException("Not str");
|
|
}
|
|
var bytes = GetBody();
|
|
return Encoding.UTF8.GetString(bytes.Array, bytes.Offset, bytes.Count);
|
|
}
|
|
|
|
public Utf8String GetUtf8String()
|
|
{
|
|
if (!Format.IsString())
|
|
{
|
|
throw new MsgPackTypeException("Not str");
|
|
}
|
|
var bytes = GetBody();
|
|
return new Utf8String(bytes);
|
|
}
|
|
|
|
public SByte GetSByte()
|
|
{
|
|
return GetValue<SByte>();
|
|
}
|
|
|
|
public Int16 GetInt16()
|
|
{
|
|
return GetValue<Int16>();
|
|
}
|
|
|
|
public Int32 GetInt32()
|
|
{
|
|
return GetValue<Int32>();
|
|
}
|
|
|
|
public Int64 GetInt64()
|
|
{
|
|
return GetValue<Int64>();
|
|
}
|
|
|
|
public Byte GetByte()
|
|
{
|
|
return GetValue<Byte>();
|
|
}
|
|
|
|
public UInt16 GetUInt16()
|
|
{
|
|
return GetValue<UInt16>();
|
|
}
|
|
|
|
public UInt32 GetUInt32()
|
|
{
|
|
return GetValue<UInt32>();
|
|
}
|
|
|
|
public UInt64 GetUInt64()
|
|
{
|
|
return GetValue<UInt64>();
|
|
}
|
|
|
|
public float GetSingle()
|
|
{
|
|
return GetValue<Single>();
|
|
}
|
|
|
|
public double GetDouble()
|
|
{
|
|
return GetValue<Double>();
|
|
}
|
|
|
|
public void SetValue<T>(Utf8String jsonPointer, T value)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public void RemoveValue(Utf8String jsonPointer)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public void AddKey(Utf8String key)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public void AddValue(ArraySegment<byte> bytes, ValueNodeType valueType)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
}
|