00001 00005 #include <bdd.h> 00006 #include <iostream> 00007 #include <bitset> 00008 #include "bag.h" 00009 #include "set.h" 00010 00011 using namespace std; 00012 00017 bdd bag2set(bdd bag){ 00018 00019 bdd u; 00020 bdd temp1; 00021 int member; 00022 for (int i =1; i<=levels;i++) 00023 { 00024 00025 if (bagIsMember(bdd_ithvar(i),bag)) 00026 { 00027 temp1 = bdd_ithvar(i); 00028 } 00029 else 00030 { 00031 temp1 = bdd_nithvar(i); 00032 } 00033 for (int k=1 ; k<=levels; k++) 00034 { 00035 if (k != i) 00036 temp1 = temp1 & bdd_nithvar(k); 00037 else 00038 temp1 = temp1 & bdd_ithvar(k); 00039 } 00040 00041 u = u | temp1; 00042 } 00043 00044 return u; 00045 } 00046 00051 bdd set2bag(bdd set){ 00052 00053 00054 bdd u; 00055 bdd temp1; 00056 temp1 = set; 00057 int member; 00058 for (int i =1; i<=levels;i++) 00059 { 00060 if (setIsMember(bdd_ithvar(i), set)) 00061 { 00062 temp1 = setOcc(i,1,temp1); 00063 } 00064 else 00065 { 00066 temp1 = setOcc(i,0,temp1); 00067 } 00068 } 00069 u = temp1; 00070 return u; 00071 }