void prepare_original_clauses(int a_gid, int b_gid, MyHashtable uid2lits, MyHashtable uid2sig, MyHashtable involved, int[] var_flag) { for (int i = 0; i < var_flag.Length; ++i) { var_flag[i] = 0; } for (int i = 0; i < solver.clauses.size(); ++i) { Clause cl = clause(i); if (cl == null || !involved.Contains(cl.uid)) { continue; } if (cl.type == ClType.ORIGINAL) { if (cl.gid(a_gid)) { sharp_assert(!cl.gid(b_gid)); foreach (int lit in cl.literals) { var_flag [VID(lit)] |= A_LOCAL; } } else { sharp_assert(cl.gid(b_gid)); foreach (int lit in cl.literals) { var_flag [VID(lit)] |= B_LOCAL; } } } uid2lits[cl.uid] = cl.literals; } for (int i = 0; i < solver.original_clauses.size(); ++i) { Clause cl = clause(solver.original_clauses[i]); sharp_assert(cl != null); sharp_assert(cl.type == ClType.ORIGINAL); if (!involved.Contains(cl.uid)) { continue; } int signal; if (cl.gid(a_gid)) { sharp_assert(!cl.gid(b_gid)); signal = solver.zero(); foreach (int lit in cl.literals) { if (var_flag[VID(lit)] == GLOBAL) { signal = solver.bor(signal, lit); } } } else { sharp_assert(cl.gid(b_gid)); signal = solver.one(); } uid2sig[cl.uid] = signal; } }