public void ReplaceNodeByDirectedGraph(Id nodeId, IDirectedGraph <INode> graphToInsert)
        {
            INodes predecessors = GetPredecessorNodes(nodeId);
            INodes successors   = GetSuccessorNodes(nodeId);

            RemoveNode(nodeId, false);
            // predecessors --> roots
            if (predecessors != null)
            {
                foreach (var predecessor in predecessors)
                {
                    foreach (var rootNode in graphToInsert.GetRootNodes())
                    {
                        AddEdge(new Edge(predecessor, rootNode));
                    }
                }
            }

            // leafs --> successors
            if (successors != null)
            {
                foreach (var leaf in graphToInsert.GetLeafNodes())
                {
                    foreach (var successor in successors)
                    {
                        AddEdge(new Edge(leaf, successor));
                    }
                }
            }

            // add all edges from graphToInsert
            AddEdges(graphToInsert.GetEdges());
        }
Esempio n. 2
0
        public void TestGetLeafs()
        {
            INode[] nodes = EntityFactory.CreateDummyNodes(7);
            IDirectedGraph <INode> directedGraph = CreateBinaryDirectedGraph(nodes);
            INodes leafs = directedGraph.GetLeafNodes();

            Assert.True(leafs != null, "There should be leafs in the graph.");

            for (int i = 3; i < 7; i++)
            {
                Assert.True(leafs.Contains(nodes[i]), $"Leafs do not contain node {nodes[i]}.");
            }
        }
Esempio n. 3
0
        /**
         * @return: all leafs of all operationGraphs
         */
        private IStackSet <ProductionOrderOperation> CreateS(
            IDirectedGraph <INode> operationGraph)
        {
            INodes leafs = operationGraph.GetLeafNodes();
            IStackSet <ProductionOrderOperation> S = new StackSet <ProductionOrderOperation>();

            if (leafs != null)
            {
                foreach (var leaf in leafs)
                {
                    S.Push((ProductionOrderOperation)leaf.GetEntity());
                }
            }

            return(S);
        }
Esempio n. 4
0
        public void TestGetSuccessorNodes()
        {
            INode[] nodes = EntityFactory.CreateDummyNodes(7);
            IDirectedGraph <INode> directedGraph = CreateBinaryDirectedGraph(nodes);
            INodes leafs = directedGraph.GetLeafNodes();

            foreach (var node in nodes)
            {
                INodes successors = directedGraph.GetSuccessorNodes(node);
                bool   isLeaf     = leafs.Contains(node);
                if (isLeaf)
                {
                    Assert.True(successors == null, "A leaf cannot have successors.");
                }
                else
                {
                    Assert.True(successors != null, "A non-leaf MUST have successors.");
                }
            }
        }