Пример #1
0
        /// <summary>
        /// Helper method for recursive BDD construction from FaultTree.
        /// </summary>
        /// <param name="node">
        /// The node.
        /// </param>
        /// <param name="nodeFactory">
        /// The node factory.
        /// </param>
        /// <returns>
        /// The <see cref="BDDNode"/>.
        /// </returns>
        private BDDNode CreateBDD(FaultTreeNode node, BDDNodeFactory nodeFactory)
        {
            if (node.GetType() == typeof(FaultTreeTerminalNode))
            {
                return(nodeFactory.CreateNode(((FaultTreeTerminalNode)node).Label));
            }

            BDDOperator op = BDDOperator.BDD_OPERATOR_AND;

            if (node.GetType() == typeof(FaultTreeOrGateNode))
            {
                op = BDDOperator.BDD_OPERATOR_OR;
            }

            BDDNode current = null;

            foreach (FaultTreeNode tn in node.Childs)
            {
                BDDNode n = this.CreateBDD(tn, nodeFactory);
                current = this.Apply(nodeFactory, op, current, n);
            }

            return(current);
        }