Ejemplo n.º 1
0
/**
 * This is the internal execution of set_enum
 * <levels> contains k BDDLEVEL levels.
 * 0 <= n < k
 */
static void
set_enum_do(BDD root, const BDD variables, int *vec, int n, vset_element_cb cb, void* context)
{
    if (root == sylvan_false) return;
    if (sylvan_set_isempty(variables)) {
        // Make sure that there are no variables left
        assert(root == sylvan_true);
        // We have one satisfying assignment!
        cb(context, vec);
    } else {
        BDDVAR var = sylvan_var(variables);
        BDD variables_next = sylvan_set_next(variables);

        int i = n / fddbits;        // which slot in the state vector
        int j = n % fddbits;        // which bit? 

        uint32_t bitmask = 1 << (fddbits-1-j);

        if (root == sylvan_true || var != sylvan_var(root)) {
            // n is skipped, take both
            vec[i] |= bitmask;
            set_enum_do(root, variables_next, vec, n+1, cb, context);
            vec[i] &= ~bitmask;
            set_enum_do(root, variables_next, vec, n+1, cb, context);
        } else {
            vec[i] |= bitmask;
            set_enum_do((sylvan_high(root)), variables_next, vec, n+1, cb, context);
            vec[i] &= ~bitmask;
            set_enum_do((sylvan_low(root)), variables_next, vec, n+1, cb, context);
        }
    }
}
Ejemplo n.º 2
0
JNIEXPORT jint JNICALL
Java_jsylvan_JSylvan_getVar(JNIEnv *env, jclass cl, jlong bdd)
{
    return sylvan_var(bdd);
}
Ejemplo n.º 3
0
JNIEXPORT jlong JNICALL
Java_jsylvan_JSylvan_getIf(JNIEnv *env, jclass cl, jlong bdd)
{
    return sylvan_ithvar(sylvan_var(bdd));
}