/// <summary> /// list1, list 2 are 2 list of nodes. These nodes are Or-explicit /// Return (list1 and list2) /// [ REFS: 'result', DEREFS: dd1, dd2 ] /// </summary> public static List <CUDDNode> And(List <CUDDNode> list1, List <CUDDNode> list2) { List <CUDDNode> result = new List <CUDDNode>(); foreach (CUDDNode dd1 in list1) { foreach (CUDDNode dd2 in list2) { CUDD.Ref(dd1); CUDD.Ref(dd2); CUDDNode dd = CUDD.Function.And(dd1, dd2); if (!dd.Equals(CUDD.ZERO)) { result.Add(dd); } else { CUDD.Deref(dd); } } } CUDD.Deref(list1); CUDD.Deref(list2); // return(result); }
/// <summary> /// Check whether subSet is a subset of set /// [ REFS: '', DEREFS: 'none' ] /// </summary> public static bool IsSubSet(CUDDNode set, CUDDNode subSet) { CUDD.Ref(subSet); CUDD.Ref(set); CUDDNode temp = CUDD.Function.And(subSet, set); bool result = temp.Equals(subSet); CUDD.Deref(temp); return(result); }
/// <summary> /// (dd && list[0]) || (dd && list[1]) ... /// [ REFS: 'result', DEREFS: dd, list ] /// </summary> /// <param name="dd"></param> /// <param name="list"></param> /// <returns></returns> public static List <CUDDNode> And(List <CUDDNode> list, CUDDNode dd) { List <CUDDNode> result = new List <CUDDNode>(); foreach (CUDDNode dd1 in list) { CUDD.Ref(dd); CUDDNode temp = CUDD.Function.And(dd, dd1); if (temp.Equals(CUDD.ZERO)) { CUDD.Deref(temp); } else { result.Add(temp); } } CUDD.Deref(dd); return(result); }
/// <summary> /// [ REFS: 'none', DEREFS: 'dd if failed to add' ] /// </summary> public void AddNodeToGuard(CUDDNode dd) { if (!dd.Equals(CUDD.ZERO)) { this.GuardDDs.Add(dd); } else { CUDD.Deref(dd); } }