public void WriteTo(ref WriteContext ctx, FieldCodec <T> codec) { if (count == 0) { return; } var writer = codec.ValueWriter; var tag = codec.Tag; if (codec.PackedRepeatedField) { // Packed primitive type int size = CalculatePackedDataSize(codec); ctx.WriteTag(tag); ctx.WriteLength(size); for (int i = 0; i < count; i++) { writer(ref ctx, array[i]); } } else { // Not packed: a simple tag/value pair for each value. // Can't use codec.WriteTagAndValue, as that omits default values. for (int i = 0; i < count; i++) { ctx.WriteTag(tag); writer(ref ctx, array[i]); if (codec.EndTag != 0) { ctx.WriteTag(codec.EndTag); } } } }
public void WriteTo(ref WriteContext ctx, Codec codec) { foreach (var entry in list) { ctx.WriteTag(codec.MapTag); WritingPrimitives.WriteLength(ref ctx.buffer, ref ctx.state, CalculateEntrySize(codec, entry)); codec.KeyCodec.WriteTagAndValue(ref ctx, entry.Key); codec.ValueCodec.WriteTagAndValue(ref ctx, entry.Value); } }
public void WriteTo(ref WriteContext ctx, Codec codec) { var message = new Codec.MessageAdapter(codec); foreach (var entry in list) { message.Key = entry.Key; message.Value = entry.Value; ctx.WriteTag(codec.MapTag); ctx.WriteMessage(message); } }