Beispiel #1
0
            /// <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);
            }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
            /// <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);
            }
Beispiel #4
0
 /// <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);
     }
 }