private static FudgeMsg ReadOneSubmessage(OpenGammaFudgeContext context, IFudgeStreamReader reader) { var writer = new FudgeMsgStreamWriter(context); writer.StartMessage(); int depth = 1; while (reader.HasNext) { switch (reader.MoveNext()) { case FudgeStreamElement.MessageStart: throw new ArgumentException(); case FudgeStreamElement.MessageEnd: throw new ArgumentException(); case FudgeStreamElement.SimpleField: writer.WriteField(reader.FieldName, reader.FieldOrdinal, reader.FieldType, reader.FieldValue); break; case FudgeStreamElement.SubmessageFieldStart: depth++; writer.StartSubMessage(reader.FieldName, reader.FieldOrdinal); break; case FudgeStreamElement.SubmessageFieldEnd: depth--; if (depth == 0) { writer.EndMessage(); return(writer.DequeueMessage()); } writer.EndSubMessage(); break; default: break; // Unknown } } throw new ArgumentException(); }
/** * @param reader * @param msg */ protected void ProcessFields(IFudgeStreamReader reader, FudgeMsg msg) { while (reader.HasNext) { FudgeStreamElement element = reader.MoveNext(); switch (element) { case FudgeStreamElement.SimpleField: msg.Add(reader.FieldName, reader.FieldOrdinal, reader.FieldType, reader.FieldValue); break; case FudgeStreamElement.SubmessageFieldStart: FudgeMsg subMsg = FudgeContext.NewMessage(); msg.Add(reader.FieldName, reader.FieldOrdinal, subMsg); ProcessFields(reader, subMsg); break; case FudgeStreamElement.SubmessageFieldEnd: case FudgeStreamElement.MessageEnd: return; } } }
public StreamingFudgeDeserializationContext(FudgeContext context, SerializationTypeMap typeMap, IFudgeStreamReader reader, IFudgeTypeMappingStrategy typeMappingStrategy) : this(context, typeMap, typeMappingStrategy, new FudgeStreamReaderMsgWriter(context, reader)) { }
protected abstract T Deserialize(OpenGammaFudgeContext context, IFudgeStreamReader stream, SerializationTypeMap typeMap);
protected override FudgeListWrapper <T> Deserialize(OpenGammaFudgeContext context, IFudgeStreamReader stream, SerializationTypeMap typeMap) { bool inList = false; var items = new List <T>(); while (stream.HasNext) { switch (stream.MoveNext()) { case FudgeStreamElement.MessageStart: break; case FudgeStreamElement.MessageEnd: return(new FudgeListWrapper <T>(items)); case FudgeStreamElement.SimpleField: if (stream.FieldName == null && stream.FieldOrdinal == 0) { continue; } throw new ArgumentException(); case FudgeStreamElement.SubmessageFieldStart: if (stream.FieldName == "list" && stream.FieldOrdinal == null) { if (inList) { throw new ArgumentException(); } inList = true; } else if (inList) { var deserializeStandard = DeserializeStandard <T>(context, stream, typeMap); items.Add(deserializeStandard); } else { throw new ArgumentException(); } break; case FudgeStreamElement.SubmessageFieldEnd: if (!inList) { throw new ArgumentException(); } inList = false; break; default: break; // Unknown } } throw new ArgumentException(); }
public ReaderFudgeDeserializationContext(FudgeContext context, SerializationTypeMap typeMap, IFudgeStreamReader reader, IFudgeTypeMappingStrategy typeMappingStrategy) : base(context, typeMap, typeMappingStrategy) { this.msgWriter = new FudgeMsgStreamWriter(context); this.pipe = new FudgeStreamPipe(reader, msgWriter); }
/// <summary> /// Constructs a new pipe from an <see cref="IFudgeStreamReader"/> to an <see cref="IFudgeStreamWriter"/>. /// </summary> /// <param name="reader"><see cref="IFudgeStreamReader"/> from which to fetch the data.</param> /// <param name="writer"><see cref="IFudgeStreamWriter"/> to output the data.</param> public FudgeStreamPipe(IFudgeStreamReader reader, IFudgeStreamWriter writer) { this.reader = reader; this.writer = writer; }
protected override IDependencyGraph Deserialize(OpenGammaFudgeContext context, IFudgeStreamReader stream, SerializationTypeMap typeMap) { string calcConfigName = null; var nodes = new List <DependencyNode>(); int edgeFrom = -1; while (stream.HasNext) { switch (stream.MoveNext()) { case FudgeStreamElement.MessageStart: break; case FudgeStreamElement.MessageEnd: return(new DependencyGraph(calcConfigName, nodes)); case FudgeStreamElement.SimpleField: switch (stream.FieldName) { case "edge": var int32 = Convert.ToInt32(stream.FieldValue); if (edgeFrom < 0) { edgeFrom = int32; } else { int to = int32; DependencyNode inputNode = nodes[edgeFrom]; DependencyNode dependentNode = nodes[to]; dependentNode.AddInputNode(inputNode); edgeFrom = -1; } break; case "calculationConfigurationName": if (calcConfigName != null) { throw new ArgumentException(); } calcConfigName = (string)stream.FieldValue; break; default: if (stream.FieldOrdinal == 0 && stream.FieldType == StringFieldType.Instance) { break; } throw new ArgumentException(); } break; case FudgeStreamElement.SubmessageFieldStart: if (stream.FieldName == "dependencyNode" && stream.FieldOrdinal == null) { var deserializeStandard = DeserializeStandard <DependencyNode>(context, stream, typeMap); nodes.Add(deserializeStandard); } else { throw new ArgumentException(); } break; case FudgeStreamElement.SubmessageFieldEnd: throw new ArgumentException(); default: break; // Unknown } } throw new ArgumentException(); }