00001 #include "mdd.h"
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 mdd_t *
00019 mdd_func1c(
00020 mdd_manager *mgr,
00021 int mvar1,
00022 int constant,
00023 boolean (*func2)(int, int))
00024 {
00025 mvar_type x;
00026 array_t *child_list_x;
00027 int i;
00028 mdd_t *tx;
00029 array_t *mvar_list = mdd_ret_mvar_list(mgr);
00030 mdd_t *zero, *one;
00031
00032 zero = mdd_zero(mgr);
00033 one = mdd_one(mgr);
00034 x = array_fetch(mvar_type, mvar_list, mvar1);
00035 if (x.status == MDD_BUNDLED)
00036 printf("\nWarning: mdd_func1c, bundled variable %s is used\n", x.name);
00037
00038 child_list_x = array_alloc(mdd_t *, x.values);
00039 for (i=0; i<x.values; i++) {
00040 if (func2(i,constant))
00041 array_insert_last(mdd_t *, child_list_x, one);
00042 else
00043 array_insert_last(mdd_t *, child_list_x, zero);
00044 }
00045 tx = mdd_case(mgr, mvar1, child_list_x);
00046 array_free(child_list_x);
00047
00048 mdd_free(one);
00049 mdd_free(zero);
00050
00051 return tx;
00052 }
00053
00054
00055
00056
00057
00058
00059