public int IndexOf(AbstractSyntaxTreeAnalysisLevel level, AbstractSyntaxTreeAnalysisNodeWrapper node) { for (var index = 0; index < level.Nodes.Count; index++) { var astAnalysisNode = level.Nodes[index]; if (astAnalysisNode.Used == false && astAnalysisNode.Node == node.Node) { return(index); } } return(-1); }
private void AdjustLevel(ref AbstractSyntaxTreeMetric metric, int index, ref IList <AbstractSyntaxTreeAnalysisLevel> expectedLevel, AbstractSyntaxTreeAnalysisNodeWrapper node) { var bestNodeIndex = FindBestNode(index, ref expectedLevel, node); if (bestNodeIndex == -1) { expectedLevel[index].Nodes.Add( new AbstractSyntaxTreeAnalysisNodeWrapper() { Used = false, Node = node.Node.Copy() }); metric.Insertations++; bestNodeIndex = expectedLevel[index].Nodes.Count - 1; } metric = RotateNodes(metric, index, bestNodeIndex, ref expectedLevel, node.Node); expectedLevel[index].Nodes[bestNodeIndex].Used = true; }
public AbstractSyntaxTreeMetric InitialLevel(ref IList <AbstractSyntaxTreeAnalysisLevel> expectedLevels, ref IList <AbstractSyntaxTreeAnalysisLevel> actualLevels) { var metric = new AbstractSyntaxTreeMetric(); if (actualLevels.Count == 0) { return(metric); } if (expectedLevels.Count == 0) { expectedLevels.Add(new AbstractSyntaxTreeAnalysisLevel() { Height = 1, }); } foreach (var analysisNodeWrapper in actualLevels[0].Nodes) { var indexOfNode = IndexOf(expectedLevels[0], analysisNodeWrapper); if (indexOfNode == -1) { var node = new AbstractSyntaxTreeAnalysisNodeWrapper() { Used = true, Node = analysisNodeWrapper.Node.Copy() }; expectedLevels[0].Nodes.Add(node); metric.Insertations++; } else { expectedLevels[0].Nodes[indexOfNode].Used = true; } } RemoveExcessAtLevel(ref metric, 0, ref expectedLevels); return(metric); }
private int FindBestNode(int index, ref IList <AbstractSyntaxTreeAnalysisLevel> expected, AbstractSyntaxTreeAnalysisNodeWrapper compareAnalysisNode) { var bestScore = -1; var bestMatchIndex = -1; for (var i = 0; i < expected[index].Nodes.Count; i++) { var analysisNode = expected[index].Nodes[i]; if (!analysisNode.Used && analysisNode.Node.Value == compareAnalysisNode.Node.Value && analysisNode.Node.Height == compareAnalysisNode.Node.Height) { var score = CompareChildren(analysisNode.Node, compareAnalysisNode.Node); if (score > bestScore) { bestMatchIndex = i; bestScore = score; } } } return(bestMatchIndex); }