public void IterableContainer() { IFudgeFieldContainer msg = StandardFudgeMessages.CreateMessageAllNames(fudgeContext); int fieldCount = 0; foreach (IFudgeField field in msg) { fieldCount++; } Assert.Equal(msg.GetNumFields(), fieldCount); }
private object DeserializeList <T>(IFudgeFieldContainer msg, IFudgeDeserializer deserializer) where T : class { var result = new List <T>(msg.GetNumFields()); deserializer.Register(msg, result); foreach (var field in msg) { if (field.Ordinal == null && field.Name == null) { result.Add(DeserializeField <T>(field, deserializer, typeData.SubTypeData.Kind)); } } return(result); }
private object DeserializeDictionary <K, V>(IFudgeFieldContainer msg, IFudgeDeserializer deserializer) where K : class where V : class { var result = new Dictionary <K, V>(msg.GetNumFields()); deserializer.Register(msg, result); var keys = new List <K>(); var values = new List <V>(); foreach (var field in msg) { if (field.Ordinal == 1) { keys.Add(DeserializeField <K>(field, deserializer, typeData.SubTypeData.Kind)); } else if (field.Ordinal == 2) { values.Add(DeserializeField <V>(field, deserializer, typeData.SubType2Data.Kind)); } else if (field.Ordinal == -1 || field.Ordinal == -2) { //TODO should be able to use these type hints to read non-generic maps like FRJ-81 } else { throw new FudgeRuntimeException("Sub-message doesn't contain a map (bad field " + field + ")"); } } int nVals = Math.Min(keys.Count, values.Count); // Consistent with Java implementation, rather than throwing an exception if they don't match for (int i = 0; i < nVals; i++) { result[keys[i]] = values[i]; } return(result); }
private object DeserializeArray <T>(IFudgeFieldContainer msg, IFudgeDeserializer deserializer) where T : class { var result = new T[msg.GetNumFields()]; deserializer.Register(msg, result); int index = 0; foreach (var field in msg) { if (field.Ordinal == null && field.Name == null) { result[index++] = DeserializeField <T>(field, deserializer, typeData.SubTypeData.Kind); } else { //See FRN-92 throw new FudgeRuntimeException("Unexpected element (bad field " + field + ")"); } } return(result); }