You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1331 lines
42 KiB
1331 lines
42 KiB
3 years ago
|
using System;
|
||
|
|
||
|
namespace MessagePack.Formatters
|
||
|
{
|
||
|
public sealed class Int16Formatter : IMessagePackFormatter<Int16>
|
||
|
{
|
||
|
public static readonly Int16Formatter Instance = new Int16Formatter();
|
||
|
|
||
|
Int16Formatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Int16 value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
return MessagePackBinary.WriteInt16(ref bytes, offset, value);
|
||
|
}
|
||
|
|
||
|
public Int16 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
return MessagePackBinary.ReadInt16(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class NullableInt16Formatter : IMessagePackFormatter<Int16?>
|
||
|
{
|
||
|
public static readonly NullableInt16Formatter Instance = new NullableInt16Formatter();
|
||
|
|
||
|
NullableInt16Formatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Int16? value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.WriteInt16(ref bytes, offset, value.Value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Int16? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.ReadInt16(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class Int16ArrayFormatter : IMessagePackFormatter<Int16[]>
|
||
|
{
|
||
|
public static readonly Int16ArrayFormatter Instance = new Int16ArrayFormatter();
|
||
|
|
||
|
Int16ArrayFormatter()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Int16[] value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length);
|
||
|
for (int i = 0; i < value.Length; i++)
|
||
|
{
|
||
|
offset += MessagePackBinary.WriteInt16(ref bytes, offset, value[i]);
|
||
|
}
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Int16[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
|
||
|
var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
var array = new Int16[len];
|
||
|
for (int i = 0; i < array.Length; i++)
|
||
|
{
|
||
|
array[i] = MessagePackBinary.ReadInt16(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
}
|
||
|
readSize = offset - startOffset;
|
||
|
return array;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class Int32Formatter : IMessagePackFormatter<Int32>
|
||
|
{
|
||
|
public static readonly Int32Formatter Instance = new Int32Formatter();
|
||
|
|
||
|
Int32Formatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Int32 value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
return MessagePackBinary.WriteInt32(ref bytes, offset, value);
|
||
|
}
|
||
|
|
||
|
public Int32 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
return MessagePackBinary.ReadInt32(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class NullableInt32Formatter : IMessagePackFormatter<Int32?>
|
||
|
{
|
||
|
public static readonly NullableInt32Formatter Instance = new NullableInt32Formatter();
|
||
|
|
||
|
NullableInt32Formatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Int32? value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.WriteInt32(ref bytes, offset, value.Value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Int32? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.ReadInt32(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class Int32ArrayFormatter : IMessagePackFormatter<Int32[]>
|
||
|
{
|
||
|
public static readonly Int32ArrayFormatter Instance = new Int32ArrayFormatter();
|
||
|
|
||
|
Int32ArrayFormatter()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Int32[] value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length);
|
||
|
for (int i = 0; i < value.Length; i++)
|
||
|
{
|
||
|
offset += MessagePackBinary.WriteInt32(ref bytes, offset, value[i]);
|
||
|
}
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Int32[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
|
||
|
var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
var array = new Int32[len];
|
||
|
for (int i = 0; i < array.Length; i++)
|
||
|
{
|
||
|
array[i] = MessagePackBinary.ReadInt32(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
}
|
||
|
readSize = offset - startOffset;
|
||
|
return array;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class Int64Formatter : IMessagePackFormatter<Int64>
|
||
|
{
|
||
|
public static readonly Int64Formatter Instance = new Int64Formatter();
|
||
|
|
||
|
Int64Formatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Int64 value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
return MessagePackBinary.WriteInt64(ref bytes, offset, value);
|
||
|
}
|
||
|
|
||
|
public Int64 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
return MessagePackBinary.ReadInt64(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class NullableInt64Formatter : IMessagePackFormatter<Int64?>
|
||
|
{
|
||
|
public static readonly NullableInt64Formatter Instance = new NullableInt64Formatter();
|
||
|
|
||
|
NullableInt64Formatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Int64? value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.WriteInt64(ref bytes, offset, value.Value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Int64? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.ReadInt64(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class Int64ArrayFormatter : IMessagePackFormatter<Int64[]>
|
||
|
{
|
||
|
public static readonly Int64ArrayFormatter Instance = new Int64ArrayFormatter();
|
||
|
|
||
|
Int64ArrayFormatter()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Int64[] value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length);
|
||
|
for (int i = 0; i < value.Length; i++)
|
||
|
{
|
||
|
offset += MessagePackBinary.WriteInt64(ref bytes, offset, value[i]);
|
||
|
}
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Int64[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
|
||
|
var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
var array = new Int64[len];
|
||
|
for (int i = 0; i < array.Length; i++)
|
||
|
{
|
||
|
array[i] = MessagePackBinary.ReadInt64(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
}
|
||
|
readSize = offset - startOffset;
|
||
|
return array;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class UInt16Formatter : IMessagePackFormatter<UInt16>
|
||
|
{
|
||
|
public static readonly UInt16Formatter Instance = new UInt16Formatter();
|
||
|
|
||
|
UInt16Formatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, UInt16 value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
return MessagePackBinary.WriteUInt16(ref bytes, offset, value);
|
||
|
}
|
||
|
|
||
|
public UInt16 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
return MessagePackBinary.ReadUInt16(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class NullableUInt16Formatter : IMessagePackFormatter<UInt16?>
|
||
|
{
|
||
|
public static readonly NullableUInt16Formatter Instance = new NullableUInt16Formatter();
|
||
|
|
||
|
NullableUInt16Formatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, UInt16? value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.WriteUInt16(ref bytes, offset, value.Value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public UInt16? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.ReadUInt16(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class UInt16ArrayFormatter : IMessagePackFormatter<UInt16[]>
|
||
|
{
|
||
|
public static readonly UInt16ArrayFormatter Instance = new UInt16ArrayFormatter();
|
||
|
|
||
|
UInt16ArrayFormatter()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, UInt16[] value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length);
|
||
|
for (int i = 0; i < value.Length; i++)
|
||
|
{
|
||
|
offset += MessagePackBinary.WriteUInt16(ref bytes, offset, value[i]);
|
||
|
}
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public UInt16[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
|
||
|
var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
var array = new UInt16[len];
|
||
|
for (int i = 0; i < array.Length; i++)
|
||
|
{
|
||
|
array[i] = MessagePackBinary.ReadUInt16(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
}
|
||
|
readSize = offset - startOffset;
|
||
|
return array;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class UInt32Formatter : IMessagePackFormatter<UInt32>
|
||
|
{
|
||
|
public static readonly UInt32Formatter Instance = new UInt32Formatter();
|
||
|
|
||
|
UInt32Formatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, UInt32 value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
return MessagePackBinary.WriteUInt32(ref bytes, offset, value);
|
||
|
}
|
||
|
|
||
|
public UInt32 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
return MessagePackBinary.ReadUInt32(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class NullableUInt32Formatter : IMessagePackFormatter<UInt32?>
|
||
|
{
|
||
|
public static readonly NullableUInt32Formatter Instance = new NullableUInt32Formatter();
|
||
|
|
||
|
NullableUInt32Formatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, UInt32? value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.WriteUInt32(ref bytes, offset, value.Value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public UInt32? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.ReadUInt32(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class UInt32ArrayFormatter : IMessagePackFormatter<UInt32[]>
|
||
|
{
|
||
|
public static readonly UInt32ArrayFormatter Instance = new UInt32ArrayFormatter();
|
||
|
|
||
|
UInt32ArrayFormatter()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, UInt32[] value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length);
|
||
|
for (int i = 0; i < value.Length; i++)
|
||
|
{
|
||
|
offset += MessagePackBinary.WriteUInt32(ref bytes, offset, value[i]);
|
||
|
}
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public UInt32[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
|
||
|
var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
var array = new UInt32[len];
|
||
|
for (int i = 0; i < array.Length; i++)
|
||
|
{
|
||
|
array[i] = MessagePackBinary.ReadUInt32(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
}
|
||
|
readSize = offset - startOffset;
|
||
|
return array;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class UInt64Formatter : IMessagePackFormatter<UInt64>
|
||
|
{
|
||
|
public static readonly UInt64Formatter Instance = new UInt64Formatter();
|
||
|
|
||
|
UInt64Formatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, UInt64 value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
return MessagePackBinary.WriteUInt64(ref bytes, offset, value);
|
||
|
}
|
||
|
|
||
|
public UInt64 Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
return MessagePackBinary.ReadUInt64(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class NullableUInt64Formatter : IMessagePackFormatter<UInt64?>
|
||
|
{
|
||
|
public static readonly NullableUInt64Formatter Instance = new NullableUInt64Formatter();
|
||
|
|
||
|
NullableUInt64Formatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, UInt64? value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.WriteUInt64(ref bytes, offset, value.Value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public UInt64? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.ReadUInt64(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class UInt64ArrayFormatter : IMessagePackFormatter<UInt64[]>
|
||
|
{
|
||
|
public static readonly UInt64ArrayFormatter Instance = new UInt64ArrayFormatter();
|
||
|
|
||
|
UInt64ArrayFormatter()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, UInt64[] value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length);
|
||
|
for (int i = 0; i < value.Length; i++)
|
||
|
{
|
||
|
offset += MessagePackBinary.WriteUInt64(ref bytes, offset, value[i]);
|
||
|
}
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public UInt64[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
|
||
|
var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
var array = new UInt64[len];
|
||
|
for (int i = 0; i < array.Length; i++)
|
||
|
{
|
||
|
array[i] = MessagePackBinary.ReadUInt64(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
}
|
||
|
readSize = offset - startOffset;
|
||
|
return array;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class SingleFormatter : IMessagePackFormatter<Single>
|
||
|
{
|
||
|
public static readonly SingleFormatter Instance = new SingleFormatter();
|
||
|
|
||
|
SingleFormatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Single value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
return MessagePackBinary.WriteSingle(ref bytes, offset, value);
|
||
|
}
|
||
|
|
||
|
public Single Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
return MessagePackBinary.ReadSingle(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class NullableSingleFormatter : IMessagePackFormatter<Single?>
|
||
|
{
|
||
|
public static readonly NullableSingleFormatter Instance = new NullableSingleFormatter();
|
||
|
|
||
|
NullableSingleFormatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Single? value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.WriteSingle(ref bytes, offset, value.Value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Single? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.ReadSingle(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class SingleArrayFormatter : IMessagePackFormatter<Single[]>
|
||
|
{
|
||
|
public static readonly SingleArrayFormatter Instance = new SingleArrayFormatter();
|
||
|
|
||
|
SingleArrayFormatter()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Single[] value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length);
|
||
|
for (int i = 0; i < value.Length; i++)
|
||
|
{
|
||
|
offset += MessagePackBinary.WriteSingle(ref bytes, offset, value[i]);
|
||
|
}
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Single[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
|
||
|
var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
var array = new Single[len];
|
||
|
for (int i = 0; i < array.Length; i++)
|
||
|
{
|
||
|
array[i] = MessagePackBinary.ReadSingle(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
}
|
||
|
readSize = offset - startOffset;
|
||
|
return array;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class DoubleFormatter : IMessagePackFormatter<Double>
|
||
|
{
|
||
|
public static readonly DoubleFormatter Instance = new DoubleFormatter();
|
||
|
|
||
|
DoubleFormatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Double value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
return MessagePackBinary.WriteDouble(ref bytes, offset, value);
|
||
|
}
|
||
|
|
||
|
public Double Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
return MessagePackBinary.ReadDouble(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class NullableDoubleFormatter : IMessagePackFormatter<Double?>
|
||
|
{
|
||
|
public static readonly NullableDoubleFormatter Instance = new NullableDoubleFormatter();
|
||
|
|
||
|
NullableDoubleFormatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Double? value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.WriteDouble(ref bytes, offset, value.Value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Double? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.ReadDouble(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class DoubleArrayFormatter : IMessagePackFormatter<Double[]>
|
||
|
{
|
||
|
public static readonly DoubleArrayFormatter Instance = new DoubleArrayFormatter();
|
||
|
|
||
|
DoubleArrayFormatter()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Double[] value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length);
|
||
|
for (int i = 0; i < value.Length; i++)
|
||
|
{
|
||
|
offset += MessagePackBinary.WriteDouble(ref bytes, offset, value[i]);
|
||
|
}
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Double[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
|
||
|
var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
var array = new Double[len];
|
||
|
for (int i = 0; i < array.Length; i++)
|
||
|
{
|
||
|
array[i] = MessagePackBinary.ReadDouble(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
}
|
||
|
readSize = offset - startOffset;
|
||
|
return array;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class BooleanFormatter : IMessagePackFormatter<Boolean>
|
||
|
{
|
||
|
public static readonly BooleanFormatter Instance = new BooleanFormatter();
|
||
|
|
||
|
BooleanFormatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Boolean value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
return MessagePackBinary.WriteBoolean(ref bytes, offset, value);
|
||
|
}
|
||
|
|
||
|
public Boolean Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
return MessagePackBinary.ReadBoolean(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class NullableBooleanFormatter : IMessagePackFormatter<Boolean?>
|
||
|
{
|
||
|
public static readonly NullableBooleanFormatter Instance = new NullableBooleanFormatter();
|
||
|
|
||
|
NullableBooleanFormatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Boolean? value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.WriteBoolean(ref bytes, offset, value.Value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Boolean? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.ReadBoolean(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class BooleanArrayFormatter : IMessagePackFormatter<Boolean[]>
|
||
|
{
|
||
|
public static readonly BooleanArrayFormatter Instance = new BooleanArrayFormatter();
|
||
|
|
||
|
BooleanArrayFormatter()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Boolean[] value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length);
|
||
|
for (int i = 0; i < value.Length; i++)
|
||
|
{
|
||
|
offset += MessagePackBinary.WriteBoolean(ref bytes, offset, value[i]);
|
||
|
}
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Boolean[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
|
||
|
var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
var array = new Boolean[len];
|
||
|
for (int i = 0; i < array.Length; i++)
|
||
|
{
|
||
|
array[i] = MessagePackBinary.ReadBoolean(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
}
|
||
|
readSize = offset - startOffset;
|
||
|
return array;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class ByteFormatter : IMessagePackFormatter<Byte>
|
||
|
{
|
||
|
public static readonly ByteFormatter Instance = new ByteFormatter();
|
||
|
|
||
|
ByteFormatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Byte value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
return MessagePackBinary.WriteByte(ref bytes, offset, value);
|
||
|
}
|
||
|
|
||
|
public Byte Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
return MessagePackBinary.ReadByte(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class NullableByteFormatter : IMessagePackFormatter<Byte?>
|
||
|
{
|
||
|
public static readonly NullableByteFormatter Instance = new NullableByteFormatter();
|
||
|
|
||
|
NullableByteFormatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Byte? value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.WriteByte(ref bytes, offset, value.Value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Byte? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.ReadByte(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public sealed class SByteFormatter : IMessagePackFormatter<SByte>
|
||
|
{
|
||
|
public static readonly SByteFormatter Instance = new SByteFormatter();
|
||
|
|
||
|
SByteFormatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, SByte value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
return MessagePackBinary.WriteSByte(ref bytes, offset, value);
|
||
|
}
|
||
|
|
||
|
public SByte Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
return MessagePackBinary.ReadSByte(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class NullableSByteFormatter : IMessagePackFormatter<SByte?>
|
||
|
{
|
||
|
public static readonly NullableSByteFormatter Instance = new NullableSByteFormatter();
|
||
|
|
||
|
NullableSByteFormatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, SByte? value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.WriteSByte(ref bytes, offset, value.Value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public SByte? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.ReadSByte(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class SByteArrayFormatter : IMessagePackFormatter<SByte[]>
|
||
|
{
|
||
|
public static readonly SByteArrayFormatter Instance = new SByteArrayFormatter();
|
||
|
|
||
|
SByteArrayFormatter()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, SByte[] value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length);
|
||
|
for (int i = 0; i < value.Length; i++)
|
||
|
{
|
||
|
offset += MessagePackBinary.WriteSByte(ref bytes, offset, value[i]);
|
||
|
}
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public SByte[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
|
||
|
var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
var array = new SByte[len];
|
||
|
for (int i = 0; i < array.Length; i++)
|
||
|
{
|
||
|
array[i] = MessagePackBinary.ReadSByte(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
}
|
||
|
readSize = offset - startOffset;
|
||
|
return array;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class CharFormatter : IMessagePackFormatter<Char>
|
||
|
{
|
||
|
public static readonly CharFormatter Instance = new CharFormatter();
|
||
|
|
||
|
CharFormatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Char value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
return MessagePackBinary.WriteChar(ref bytes, offset, value);
|
||
|
}
|
||
|
|
||
|
public Char Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
return MessagePackBinary.ReadChar(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class NullableCharFormatter : IMessagePackFormatter<Char?>
|
||
|
{
|
||
|
public static readonly NullableCharFormatter Instance = new NullableCharFormatter();
|
||
|
|
||
|
NullableCharFormatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Char? value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.WriteChar(ref bytes, offset, value.Value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Char? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.ReadChar(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class CharArrayFormatter : IMessagePackFormatter<Char[]>
|
||
|
{
|
||
|
public static readonly CharArrayFormatter Instance = new CharArrayFormatter();
|
||
|
|
||
|
CharArrayFormatter()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, Char[] value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length);
|
||
|
for (int i = 0; i < value.Length; i++)
|
||
|
{
|
||
|
offset += MessagePackBinary.WriteChar(ref bytes, offset, value[i]);
|
||
|
}
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Char[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
|
||
|
var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
var array = new Char[len];
|
||
|
for (int i = 0; i < array.Length; i++)
|
||
|
{
|
||
|
array[i] = MessagePackBinary.ReadChar(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
}
|
||
|
readSize = offset - startOffset;
|
||
|
return array;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class DateTimeFormatter : IMessagePackFormatter<DateTime>
|
||
|
{
|
||
|
public static readonly DateTimeFormatter Instance = new DateTimeFormatter();
|
||
|
|
||
|
DateTimeFormatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, DateTime value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
return MessagePackBinary.WriteDateTime(ref bytes, offset, value);
|
||
|
}
|
||
|
|
||
|
public DateTime Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
return MessagePackBinary.ReadDateTime(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class NullableDateTimeFormatter : IMessagePackFormatter<DateTime?>
|
||
|
{
|
||
|
public static readonly NullableDateTimeFormatter Instance = new NullableDateTimeFormatter();
|
||
|
|
||
|
NullableDateTimeFormatter()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, DateTime? value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.WriteDateTime(ref bytes, offset, value.Value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public DateTime? Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return MessagePackBinary.ReadDateTime(bytes, offset, out readSize);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public sealed class DateTimeArrayFormatter : IMessagePackFormatter<DateTime[]>
|
||
|
{
|
||
|
public static readonly DateTimeArrayFormatter Instance = new DateTimeArrayFormatter();
|
||
|
|
||
|
DateTimeArrayFormatter()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public int Serialize(ref byte[] bytes, int offset, DateTime[] value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
if (value == null)
|
||
|
{
|
||
|
return MessagePackBinary.WriteNil(ref bytes, offset);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, value.Length);
|
||
|
for (int i = 0; i < value.Length; i++)
|
||
|
{
|
||
|
offset += MessagePackBinary.WriteDateTime(ref bytes, offset, value[i]);
|
||
|
}
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public DateTime[] Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
readSize = 1;
|
||
|
return null;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
|
||
|
var len = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
var array = new DateTime[len];
|
||
|
for (int i = 0; i < array.Length; i++)
|
||
|
{
|
||
|
array[i] = MessagePackBinary.ReadDateTime(bytes, offset, out readSize);
|
||
|
offset += readSize;
|
||
|
}
|
||
|
readSize = offset - startOffset;
|
||
|
return array;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|