/// <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); }