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 }