// We will have problem with binary blobs greater than int.MaxValue bytes. public byte[] Read(IMsgPackReader reader, MsgPackContext context, Func <byte[]> creator) { var type = reader.ReadDataType(); uint length; switch (type) { case DataTypes.Null: return(null); case DataTypes.Bin8: length = IntConverter.ReadUInt8(reader); break; case DataTypes.Bin16: length = IntConverter.ReadUInt16(reader); break; case DataTypes.Bin32: length = IntConverter.ReadUInt32(reader); break; default: throw ExceptionUtils.BadTypeException(type, DataTypes.Bin8, DataTypes.Bin16, DataTypes.Bin32, DataTypes.Null); } return(ReadByteArray(reader, length)); }
public override TArray Read(IMsgPackReader reader, MsgPackContext context, Func <TArray> creator) { var type = reader.ReadDataType(); switch (type) { case DataTypes.Null: return(default(TArray)); case DataTypes.Array16: return(ReadArray(reader, context, creator, IntConverter.ReadUInt16(reader))); case DataTypes.Array32: return(ReadArray(reader, context, creator, IntConverter.ReadUInt32(reader))); } uint length; if (TryGetLengthFromFixArray(type, out length)) { return(ReadArray(reader, context, creator, length)); } throw ExceptionUtils.BadTypeException(type, DataTypes.Array16, DataTypes.Array32, DataTypes.FixArray); }
private void WriteStringHeaderAndLength(IMsgPackWriter writer, int length) { if (length <= 31) { writer.Write((byte)(((byte)DataTypes.FixStr + length) % 256)); return; } if (length <= byte.MaxValue) { writer.Write(DataTypes.Str8); IntConverter.WriteValue((byte)length, writer); return; } if (length <= ushort.MaxValue) { writer.Write(DataTypes.Str16); IntConverter.WriteValue((ushort)length, writer); } else { writer.Write(DataTypes.Str32); IntConverter.WriteValue((uint)length, writer); } }
public string Read(IMsgPackReader reader, MsgPackContext context, Func <string> creator) { var type = reader.ReadDataType(); switch (type) { case DataTypes.Null: return(null); case DataTypes.Str8: return(ReadString(reader, IntConverter.ReadUInt8(reader))); case DataTypes.Str16: return(ReadString(reader, IntConverter.ReadUInt16(reader))); case DataTypes.Str32: return(ReadString(reader, IntConverter.ReadUInt32(reader))); } uint length; if (TryGetFixstrLength(type, out length)) { return(ReadString(reader, length)); } throw ExceptionUtils.BadTypeException(type, DataTypes.FixStr, DataTypes.Str8, DataTypes.Str16, DataTypes.Str32); }
protected void WriteMapHeaderAndLength(int length, IMsgPackWriter reader) { if (length <= 15) { IntConverter.WriteValue((byte)((byte)DataTypes.FixMap + length), reader); return; } if (length <= ushort.MaxValue) { reader.Write(DataTypes.Map16); IntConverter.WriteValue((ushort)length, reader); } else { reader.Write(DataTypes.Map32); IntConverter.WriteValue((uint)length, reader); } }
protected void WriteArrayHeaderAndLength(int length, IMsgPackWriter writer) { if (length <= 15) { IntConverter.WriteValue((byte)((byte)DataTypes.FixArray + length), writer); return; } if (length <= ushort.MaxValue) { writer.Write(DataTypes.Array16); IntConverter.WriteValue((ushort)length, writer); } else { writer.Write(DataTypes.Array32); IntConverter.WriteValue((uint)length, writer); } }
private void WriteBinaryHeaderAndLength(int length, IMsgPackWriter writer) { if (length <= byte.MaxValue) { writer.Write(DataTypes.Bin8); IntConverter.WriteValue((byte)length, writer); return; } if (length <= ushort.MaxValue) { writer.Write(DataTypes.Bin16); IntConverter.WriteValue((ushort)length, writer); } else { writer.Write(DataTypes.Bin32); IntConverter.WriteValue((uint)length, writer); } }