/// <summary> /// Write simple field with known length. /// </summary> /// <param name="fieldId">Field ID.</param> /// <param name="val">Value.</param> /// <param name="handler">Handler.</param> /// <param name="len">Length.</param> private void WriteSimpleField <T>(int fieldId, T val, PortableSystemTypedWriteDelegate <T> handler, int len) { CheckNotRaw(); _stream.WriteInt(fieldId); _stream.WriteInt(1 + len); // Additional byte for field type. handler(_stream, val); }
/// <summary> /// Write nullable raw field. /// </summary> /// <param name="val">Value.</param> /// <param name="handler">Handler.</param> private void WriteSimpleNullableRawField <T>(T val, PortableSystemTypedWriteDelegate <T> handler) { if (val == null) { _stream.WriteByte(PortableUtils.HdrNull); } else { handler(_stream, val); } }
/// <summary> /// Write simple nullable field with known length. /// </summary> /// <param name="fieldName">Field name.</param> /// <param name="typeId">Type ID.</param> /// <param name="val">Value.</param> /// <param name="handler">Handler.</param> /// <param name="len">Length.</param> private void WriteSimpleNullableField <T>(string fieldName, byte typeId, T val, PortableSystemTypedWriteDelegate <T> handler, int len) { int fieldId = PortableUtils.FieldId(_curTypeId, fieldName, _curConverter, _curMapper); WriteSimpleNullableField(fieldId, val, handler, len); if (_curMetaHnd != null) { _curMetaHnd.OnFieldWrite(fieldId, fieldName, typeId); } }
/// <summary> /// Write simple nullable field with known length. /// </summary> /// <param name="fieldId">Field ID.</param> /// <param name="val">Value.</param> /// <param name="handler">Handler.</param> /// <param name="len">Length.</param> private void WriteSimpleNullableField <T>(int fieldId, T val, PortableSystemTypedWriteDelegate <T> handler, int len) { CheckNotRaw(); _stream.WriteInt(fieldId); if (val == null) { _stream.WriteInt(1); _stream.WriteByte(PortableUtils.HdrNull); } else { _stream.WriteInt(1 + len); handler(_stream, val); } }
/// <summary> /// Write simple nullable field with unknown length. /// </summary> /// <param name="fieldId">Field ID.</param> /// <param name="val">Value.</param> /// <param name="handler">Handler.</param> private void WriteSimpleNullableField <T>(int fieldId, T val, PortableSystemTypedWriteDelegate <T> handler) { CheckNotRaw(); _stream.WriteInt(fieldId); if (val == null) { _stream.WriteInt(1); _stream.WriteByte(PortableUtils.HdrNull); } else { int pos = _stream.Position; _stream.Seek(4, SeekOrigin.Current); handler(_stream, val); WriteFieldLength(_stream, pos); } }