示例#1
0
void shadow_satisfy(shadow_mgr mgr, ref_t r) {
    if (!mgr->do_cudd)
	return;
    DdNode *n = get_ddnode(mgr, r);
    bool zdd = is_zdd(mgr, r);
    FILE *logfile = get_logfile();
    if (zdd) {
	Cudd_zddPrintMinterm(mgr->bdd_manager, n);
	if (logfile) {
	    FILE *savefile = Cudd_ReadStdout(mgr->bdd_manager);
	    Cudd_SetStdout(mgr->bdd_manager, logfile);
	    Cudd_zddPrintMinterm(mgr->bdd_manager, n);
	    Cudd_SetStdout(mgr->bdd_manager, savefile);
	}
    }
    else {
	Cudd_PrintMinterm(mgr->bdd_manager, n);
	if (logfile) {
	    FILE *savefile = Cudd_ReadStdout(mgr->bdd_manager);
	    Cudd_SetStdout(mgr->bdd_manager, logfile);
	    Cudd_PrintMinterm(mgr->bdd_manager, n);
	    Cudd_SetStdout(mgr->bdd_manager, savefile);
	}
    }
}
示例#2
0
文件: testextra.c 项目: cjdrake/cudd
/**
 * @brief Basic ADD test.
 * @return 0 if successful; -1 otherwise.
 */
static int
testAdd(int verbosity)
{
    DdManager *manager;
    DdNode *f, *var, *tmp, *bg;
    int i, ret;
    CUDD_VALUE_TYPE pinf;

    manager = Cudd_Init(0, 0, CUDD_UNIQUE_SLOTS, CUDD_CACHE_SLOTS, 0);
    if (!manager) {
        if (verbosity) {
            printf("initialization failed\n");
        }
        return -1;
    }
    pinf = Cudd_V(Cudd_ReadPlusInfinity(manager));
    if (verbosity) {
        printf("Plus infinity is %g\n", pinf);
    }
    f = Cudd_addConst(manager,5);
    Cudd_Ref(f);
    for (i = 3; i >= 0; i--) {
        var = Cudd_addIthVar(manager,i);
        Cudd_Ref(var);
        tmp = Cudd_addApply(manager,Cudd_addTimes,var,f);
        Cudd_Ref(tmp);
        Cudd_RecursiveDeref(manager,f);
        Cudd_RecursiveDeref(manager,var);
        f = tmp;
    }
    if (verbosity) {
        Cudd_PrintMinterm(manager, f);
        printf("\n");
    }
    Cudd_RecursiveDeref(manager, f);
    bg = Cudd_ReadBackground(manager);
    if (verbosity) {
        printf("background (%g) minterms : ", Cudd_V(bg));
        Cudd_ApaPrintMinterm(Cudd_ReadStdout(manager), manager, bg, 0);
    }
    ret = Cudd_CheckZeroRef(manager);
    if (ret != 0 && verbosity) {
        printf("%d non-zero ADD reference counts after dereferencing\n", ret);
    }
    Cudd_Quit(manager);
    return ret != 0;
}