public static void Serialize(SoftMutableBidirectionalGraph <CFGNode, CFGEdge> graph, string path) { var ser = new GraphMLSerializer <CFGNode, CFGEdge, SoftMutableBidirectionalGraph <CFGNode, CFGEdge> >(); using (var writer = XmlWriter.Create(path + "temp.graphml", new XmlWriterSettings { Indent = true, WriteEndDocumentOnClose = false })) { ser.Serialize(writer, graph, v => v.Id.ToString(), e => e.Id.ToString()); } }
public static SoftMutableBidirectionalGraph <CFGNode, CFGEdge> Deserialize(string path) { var deser = new GraphMLDeserializer <CFGNode, CFGEdge, SoftMutableBidirectionalGraph <CFGNode, CFGEdge> >(); var graph = new SoftMutableBidirectionalGraph <CFGNode, CFGEdge>(); var ivf = new IdentifiableVertexFactory <CFGNode>(CFGNode.Factory); var ief = new IdentifiableEdgeFactory <CFGNode, CFGEdge>(CFGEdge.Factory); using (var reader = XmlReader.Create(path)) { deser.Deserialize(reader, graph, ivf, ief); } ReplaceLineBreaks(graph, false); return(graph); }
private static void ReplaceLineBreaks(SoftMutableBidirectionalGraph <CFGNode, CFGEdge> graph, bool serialize) { if (serialize) { foreach (var v in graph.Vertices) { v.PathCondition = v.PathCondition.Replace(Environment.NewLine, "[LB]"); v.IncrementalPathCondition = v.IncrementalPathCondition.Replace(Environment.NewLine, "[LB]"); } } else { foreach (var v in graph.Vertices) { v.PathCondition = v.PathCondition.Replace("[LB]", Environment.NewLine); v.IncrementalPathCondition = v.IncrementalPathCondition.Replace("[LB]", Environment.NewLine); } } }