00001 #include "mdd.h"
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 array_t *
00019 mdd_get_support(mdd_manager *mdd_mgr, mdd_t *f)
00020 {
00021 array_t *full_list, *support_list;
00022 array_t *mvar_list = mdd_ret_mvar_list(mdd_mgr);
00023 array_t *bvar_list = mdd_ret_bvar_list(mdd_mgr);
00024 var_set_t *vset;
00025 int i, list_length;
00026 bvar_type bv;
00027 boolean present;
00028
00029
00030
00031 list_length = array_n(mvar_list);
00032 full_list = array_alloc(boolean, list_length);
00033 for (i = 0; i < array_n(mvar_list); i++) {
00034 array_insert(boolean, full_list, i, 0);
00035 }
00036
00037 vset = bdd_get_support(f);
00038 for (i = 0; i < array_n(bvar_list); i++) {
00039 if (var_set_get_elt(vset, i) == 1) {
00040 bv = array_fetch(bvar_type, bvar_list, i);
00041 (void) array_insert(boolean, full_list, bv.mvar_id, 1);
00042 }
00043 }
00044
00045 support_list = array_alloc(int, 0);
00046 for (i = 0; i < array_n(mvar_list); i++) {
00047 present = array_fetch(boolean, full_list, i);
00048 if (present) array_insert_last(int, support_list, i);
00049 }
00050
00051 (void) array_free(full_list);
00052 (void) var_set_free(vset);
00053
00054 return support_list;
00055 }
00056
00057 array_t *
00058 mdd_get_bdd_support_ids(mdd_manager *mdd_mgr, mdd_t *f)
00059 {
00060 array_t *bdd_support_list;
00061 array_t *bvar_list = mdd_ret_bvar_list(mdd_mgr);
00062 var_set_t *vset;
00063 int i;
00064
00065 bdd_support_list = array_alloc(int, 0);
00066
00067 vset = bdd_get_support(f);
00068 for (i = 0; i < array_n(bvar_list); i++) {
00069 if (var_set_get_elt(vset, i) == 1) {
00070 array_insert_last(int, bdd_support_list, i);
00071 }
00072 }
00073
00074 (void) var_set_free(vset);
00075 return bdd_support_list;
00076 }
00077
00078 array_t *
00079 mdd_get_bdd_support_vars(mdd_manager *mdd_mgr, mdd_t *f)
00080 {
00081 array_t *bdd_support_list;
00082 array_t *bvar_list = mdd_ret_bvar_list(mdd_mgr);
00083 var_set_t *vset;
00084 mdd_t *var;
00085 int i;
00086
00087 bdd_support_list = array_alloc(mdd_t *, 0);
00088
00089 vset = bdd_get_support(f);
00090 for (i = 0; i < array_n(bvar_list); i++) {
00091 if (var_set_get_elt(vset, i) == 1) {
00092 var = bdd_var_with_index(mdd_mgr, i);
00093 array_insert_last(mdd_t *, bdd_support_list, var);
00094 }
00095 }
00096
00097 (void) var_set_free(vset);
00098 return bdd_support_list;
00099 }
00100
00101
00102
00103
00104