/// <inheritdoc /> public virtual void Add(string name, int?ordinal, FudgeFieldType type, object value) { if (ordinal.HasValue && (ordinal < short.MinValue || ordinal > short.MaxValue)) { throw new ArgumentOutOfRangeException("ordinal", "Ordinal must be within signed 16-bit range"); } if (type == null) { // See if we can derive it type = context.TypeHandler.DetermineTypeFromValue(value); if (type == null) { throw new ArgumentException("Cannot determine a Fudge type for value " + value + " of type " + value.GetType()); } } if (type == FudgeMsgFieldType.Instance && !(value is FudgeMsg)) { // Copy the fields across to a new message value = CopyContainer((IFudgeFieldContainer)value); } // Adjust values to the lowest possible representation. value = type.Minimize(value, ref type); FudgeMsgField field = new FudgeMsgField(type, value, name, (short?)ordinal); fields.Add(field); }
/// <inheritdoc/> public override object Minimize(object value, ref FudgeFieldType type) { type = wireType; object newValue = outputConverter((T)value); return(wireType.Minimize(newValue, ref type)); // Allow the wire type to minimise further if it wants }