Example #1
0
        protected void ComputeStepDefault(PatternNodePPA node, ResultPPA result)
        {
            PatternNodePPA parent = node.Parent;
            IPermutationDictionary <ExtensionMap> extensionMaps;

            parent.TryGetExtensionMapsDescendants(out extensionMaps);
            List <PatternNodePPA>[] descendants;
            parent.TryGetDescendants(out descendants);
            List <PatternNodePPA> nodes = descendants[node.PositionPrecedingLetters(node.Permutation.Length - 1)];

            IPermutationDictionary <ExtensionMap> newExtensionMaps;

            List <PatternNodePPA>[] newDescendants = new List <PatternNodePPA> [node.Permutation.Length + 1];
            List <PatternNodePPA>   newNodes;
            List <PatternNodePPA>   allNodes = new List <PatternNodePPA>();

            for (int i = 0; i < newDescendants.Length; i++)
            {
                newDescendants[i] = new List <PatternNodePPA>();
            }

            foreach (var nodeProcessed in nodes)
            {
                newNodes = nodeProcessed.ComputeChildren(extensionMaps, avoidedPermutations);
                allNodes.AddRange(newNodes);
                AddDescendants(newDescendants, newNodes, parent.DescendantsDepthFromNode,
                               node.Permutation.Length);
            }

            result.ProcessNodes(allNodes);
            newExtensionMaps = ExtractExtensionMaps(allNodes);

            node.SetDescendants(newDescendants, parent.DescendantsDepthFromNode);
            node.SetExtensionMapsDescendants(newExtensionMaps);
        }