00001 #include "mdd.h"
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 mdd_t *
00021 mdd_literal(
00022 mdd_manager *mgr,
00023 int mddid,
00024 array_t *values)
00025 {
00026 mvar_type mvar;
00027 mdd_t *one, *zero;
00028 array_t *allValues;
00029 int i;
00030 int value;
00031 mdd_t *result;
00032
00033 mvar = mdd_get_var_by_id(mgr, mddid);
00034 one = mdd_one(mgr);
00035 zero = mdd_zero(mgr);
00036 allValues = array_alloc(mdd_t *, mvar.values);
00037
00038
00039 for(i = 0; i < mvar.values; i++)
00040 array_insert(mdd_t *, allValues, i, zero);
00041
00042
00043 arrayForEachItem(int, values, i, value)
00044 array_insert(mdd_t *, allValues, value, one);
00045
00046 result = mdd_case(mgr, mddid, allValues);
00047 array_free(allValues);
00048
00049 mdd_free(one);
00050 mdd_free(zero);
00051
00052 return result;
00053 }
00054
00055
00056
00057
00058
00059
00060