/*++ Copyright (c) 2017 Microsoft Corporation Module Name: sat_par.cpp Abstract: Utilities for parallel SAT solving. Author: Nikolaj Bjorner (nbjorner) 2017-1-29. Revision History: --*/ #include "sat/sat_par.h" namespace sat { par::par() {} void par::exchange(literal_vector const& in, unsigned& limit, literal_vector& out) { #pragma omp critical (par_solver) { if (limit < m_units.size()) { // this might repeat some literals. out.append(m_units.size() - limit, m_units.c_ptr() + limit); } for (unsigned i = 0; i < in.size(); ++i) { literal lit = in[i]; if (!m_unit_set.contains(lit.index())) { m_unit_set.insert(lit.index()); m_units.push_back(lit); } } limit = m_units.size(); } } };