示例#1
0
 void do_object(oop obj) {
   if (should_visit(obj)) {
     if (!_cit->record_instance(obj)) {
       _missed_count++;
     }
   }
 }
示例#2
0
 void visit_macro(expr const & e) {
     if (is_expr_quote(e) || is_pexpr_quote(e))
         return;
     if (should_visit(e)) {
         for (unsigned i = 0; i < macro_num_args(e); i++)
             visit(macro_arg(e, i));
     }
 }
示例#3
0
 void visit_binding(expr const & _e) {
     if (should_visit(_e)) {
         buffer<expr> ls;
         expr e = _e;
         while (is_lambda(e) || is_pi(e)) {
             expr d = instantiate_rev(binding_domain(e), ls.size(), ls.data());
             expr l = mk_local(mk_fresh_name(), binding_name(e), d, binding_info(e));
             ls.push_back(l);
             e = binding_body(e);
         }
         visit(instantiate_rev(e, ls.size(), ls.data()));
     }
 }
示例#4
0
 void visit_app(expr const & e) {
     if (should_visit(e)) {
         buffer<expr> args;
         expr const & fn = get_app_args(e, args);
         if (is_constant(fn) && is_inline(m_tc.env(), const_name(fn))) {
             if (auto new_e = unfold_app(m_tc.env(), e)) {
                 visit(*new_e);
                 return;
             }
         }
         visit(fn);
         for (expr const & arg : args)
             visit(arg);
     }
 }
示例#5
0
void dfs(int r, int c)
{
    memo[r][c][0] = x;
    memo[r][c][1] = y;

    if (is_odd(r) && is_odd(c)) {
        curr += a2;
        if (grid[r/2][c/2] == '0') {
            if (should_visit(r - 1, c + 1)) dfs(r-1, c+1);
            if (should_visit(r + 1, c - 1)) dfs(r+1, c-1);
        }
        else {
            if (should_visit(r - 1, c - 1)) dfs(r-1, c-1);
            if (should_visit(r + 1, c + 1)) dfs(r+1, c+1);
        }
        return;
    }

    if (is_valid(r-1, c-1)) {
        int p = (r-1) / 2, q = (c-1)/2;
        if (grid[p][q] == '0') curr += a1;
        else if (should_visit(r-1, c-1)) dfs(r-1, c-1);
    }
    if (is_valid(r-1, c+1)) {
        int p = (r-1) / 2, q = (c+1)/2;
        if (grid[p][q] == '1') curr += a1;
        else if (should_visit(r-1, c+1)) dfs(r-1, c+1);
    }
    if (is_valid(r+1, c-1)) {
        int p = (r+1) / 2, q = (c-1)/2;
        if (grid[p][q] == '1') curr += a1;
        else if (should_visit(r+1, c-1)) dfs(r+1, c-1);
    }
    if (is_valid(r+1, c+1)) {
        int p = (r+1) / 2, q = (c+1)/2;
        if (grid[p][q] == '0') curr += a1;
        else if (should_visit(r+1, c+1)) dfs(r+1, c+1);
    }
}
示例#6
0
 void visit_let(expr const & e) {
     if (should_visit(e)) {
         visit(instantiate(let_body(e), let_value(e)));
     }
 }