00001 #include <bdd.h>
00002 #include <iostream>
00003 #include <bitset>
00004 #include "bag.h"
00005 #include "set.h"
00006
00007 using namespace std;
00008
00009
00010 bdd bag2set(bdd bag){
00011
00012 bdd u;
00013 bdd temp1;
00014 int member;
00015
00016 for (int i =0; i<levels;i++)
00017 {
00018
00019
00020 if (bagIsMember(bdd_ithvar(i),bag))
00021 {
00022 if (getOcc(bdd_ithvar(i), bag) > 0){
00023
00024 temp1 = bdd_ithvar(i);
00025 cout << i << "'s occ greater than zero " << endl;
00026
00027 }
00028 else {
00029 temp1 = bdd_nithvar(i);
00030 cout << i << "'s occ is zero " << endl;
00031
00032 }
00033
00034 }
00035 else {
00036 continue;
00037
00038 }
00039
00040 for (int k=0 ; k<levels; k++){
00041
00042 if (k != i)
00043 {
00044 temp1 = temp1 & bdd_nithvar(k);
00045 }
00046 }
00047
00048
00049 u = u | temp1;
00050 }
00051
00052 return u;
00053
00054
00055 }
00056
00057
00058
00059
00060
00061
00062 bdd set2bag(bdd set){
00063
00064
00065 bdd u;
00066 bdd temp1;
00067 int member;
00068
00069 for (int i =0; i<levels;i++)
00070 {
00071
00072
00073 if (setIsMember(bdd_ithvar(i),set)){
00074 member =1;
00075
00076
00077 }
00078 else {
00079 member =0;
00080
00081
00082 }
00083 bitset<3> bs(member);
00084
00085
00086
00087 temp1 = bdd_ithvar(i);
00088
00089 for (int k=0 ; k<levels; k++){
00090
00091 if (k != i)
00092 {
00093 temp1 = temp1 & bdd_nithvar(k);
00094 }
00095 }
00096
00097
00098
00099 for (int j=0; j<bs.size(); j++)
00100 {
00101
00102
00103 if (bs[j] == 1)
00104 {
00105
00106 temp1 = temp1 & bdd_ithvar(j+3);
00107 }
00108 else
00109 {
00110
00111 temp1 = temp1 & bdd_nithvar(j+3);
00112 }
00113 }
00114 u = u | temp1;
00115 }
00116
00117 return u;
00118 }