/// <summary> /// Deep copy constructor for PDG /// </summary> /// <param name="pdg">Original PDG</param> /// <returns>New PDG</returns> public static PDG DeepCopy(PDG pdg) { PDG pdgCopy = new PDG(); pdgCopy._nodes = new SerializableDictionary <string, PDGNode>(); foreach (KeyValuePair <string, PDGNode> kvpNode in pdg._nodes) { PDGNode nodeCopy = new PDGNode(kvpNode.Value.MethodName); foreach (PDGEdge edge in kvpNode.Value.OutgoingEdges) { nodeCopy.SetEdgeWeight(edge.OutgoingNodeID, edge.Weight); } pdgCopy.Add(nodeCopy); } return(pdgCopy); }
/// <summary> /// Adds a node to the PDG /// </summary> /// <param name="pdgNode">Node to add</param> public void Add(PDGNode pdgNode) { _nodes.Add(pdgNode.MethodName, pdgNode); _mapping.Add(pdgNode.MethodName); _indexes.Add(pdgNode.MethodName, _mapping.Count - 1); }
/// <summary> /// Deep copy constructor for PDG /// </summary> /// <param name="pdg">Original PDG</param> /// <returns>New PDG</returns> public static PDG DeepCopy(PDG pdg) { PDG pdgCopy = new PDG(); pdgCopy._nodes = new SerializableDictionary<string,PDGNode>(); foreach (KeyValuePair<string, PDGNode> kvpNode in pdg._nodes) { PDGNode nodeCopy = new PDGNode(kvpNode.Value.MethodName); foreach (PDGEdge edge in kvpNode.Value.OutgoingEdges) { nodeCopy.SetEdgeWeight(edge.OutgoingNodeID, edge.Weight); } pdgCopy.Add(nodeCopy); } return pdgCopy; }