summaryrefslogtreecommitdiff
path: root/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.h.in
diff options
context:
space:
mode:
Diffstat (limited to 'cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.h.in')
-rw-r--r--cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.h.in168
1 files changed, 168 insertions, 0 deletions
diff --git a/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.h.in b/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.h.in
new file mode 100644
index 000000000..b157e9c8f
--- /dev/null
+++ b/cryptominisat5/cryptominisat-5.6.3/src/cryptominisat.h.in
@@ -0,0 +1,168 @@
+/******************************************
+Copyright (c) 2016, Mate Soos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+***********************************************/
+
+#ifndef __CRYPTOMINISAT5_H__
+#define __CRYPTOMINISAT5_H__
+
+#define CRYPTOMINISAT_VERSION_MAJOR @PROJECT_VERSION_MAJOR@
+#define CRYPTOMINISAT_VERSION_MINOR @PROJECT_VERSION_MINOR@
+#define CRYPTOMINISAT_VERSION_PATCH @PROJECT_VERSION_PATCH@
+
+#include <atomic>
+#include <vector>
+#include <iostream>
+#include <utility>
+#include "cryptominisat5/solvertypesmini.h"
+
+namespace CMSat {
+ struct CMSatPrivateData;
+ #ifdef _WIN32
+ class __declspec(dllexport) SATSolver
+ #else
+ class SATSolver
+ #endif
+ {
+ public:
+ SATSolver(void* config = NULL
+ , std::atomic<bool>* interrupt_asap = NULL
+ );
+ ~SATSolver();
+
+ ////////////////////////////
+ // Adding variables and clauses
+ ////////////////////////////
+
+ void new_var(); //add a new variable to the solver
+ void new_vars(const size_t n); //and many new variables to the solver -- much faster
+ unsigned nVars() const; //get number of variables inside the solver
+ bool add_clause(const std::vector<Lit>& lits);
+ bool add_xor_clause(const std::vector<unsigned>& vars, bool rhs);
+
+ ////////////////////////////
+ // Solving and simplifying
+ ////////////////////////////
+
+ lbool solve(const std::vector<Lit>* assumptions = 0, bool only_indep_solution = false); //solve the problem, optionally with assumptions. If only_indep_solution is set, only the independent variables set with set_independent_vars() are returned in the solution
+ lbool simplify(const std::vector<Lit>* assumptions = 0); //simplify the problem, optionally with assumptions
+ const std::vector<lbool>& get_model() const; //get model that satisfies the problem. Only makes sense if previous solve()/simplify() call was l_True
+ const std::vector<Lit>& get_conflict() const; //get conflict in terms of the assumptions given in case the previous call to solve() was l_False
+ bool okay() const; //the problem is still solveable, i.e. the empty clause hasn't been derived
+
+ ////////////////////////////
+ // Debug all calls for later replay with --debuglit FILENAME
+ ////////////////////////////
+ void log_to_file(std::string filename);
+
+ ////////////////////////////
+ // SQLite for statistics gathering
+ ////////////////////////////
+ void set_sqlite(std::string filename);
+ void add_sql_tag(const std::string& tagname, const std::string& tag);
+ unsigned long get_sql_id() const;
+
+ ////////////////////////////
+ // Configuration
+ // -- Note that nothing else can be changed, only these.
+ // -- The main.cpp has access to the internal config, but it changes
+ // -- all the time and hence exposing it to the outside world would
+ // -- be very brittle.
+ ////////////////////////////
+
+ void set_num_threads(unsigned n); //Number of threads to use. Must be set before any vars/clauses are added
+ void set_allow_otf_gauss(); //allow on-the-fly gaussian elimination
+ void set_max_time(double max_time); //max time to run to on next solve() call
+ void set_max_confl(int64_t max_confl); //max conflict to run to on next solve() call
+ void set_verbosity(unsigned verbosity = 0); //default is 0, silent
+ void set_default_polarity(bool polarity); //default polarity when branching for all vars
+ void set_no_simplify(); //never simplify
+ void set_no_simplify_at_startup(); //doesn't simplify at start, faster startup time
+ void set_no_equivalent_lit_replacement(); //don't replace equivalent literals
+ void set_no_bva(); //No bounded variable addition
+ void set_no_bve(); //No bounded variable elimination
+ void set_greedy_undef(); //Try to set variables to l_Undef in solution
+ void set_independent_vars(std::vector<uint32_t>* ind_vars);
+ void set_timeout_all_calls(double secs); //max timeout on all subsequent solve() or simplify
+
+
+ ////////////////////////////
+ // Get generic info
+ ////////////////////////////
+ static const char* get_version(); //get solver version in string format
+ static const char* get_version_sha1(); //get SHA1 version string of the solver
+ static const char* get_compilation_env(); //get compilation environment string
+
+
+ ////////////////////////////
+ // Get info about only the last solve() OR simplify() call
+ // summed for all threads
+ ////////////////////////////
+ uint64_t get_last_conflicts(); //get total number of conflicts of last solve() or simplify() call of all threads
+ uint64_t get_last_propagations(); //get total number of propagations of last solve() or simplify() call made by all threads
+ uint64_t get_last_decisions(); //get total number of decisions of last solve() or simplify() call made by all threads
+
+
+ ////////////////////////////
+ //Get info about total sum of all time of all threads
+ ////////////////////////////
+
+ uint64_t get_sum_conflicts(); //get total number of conflicts of all time of all threads
+ uint64_t get_sum_propagations(); //get total number of propagations of all time made by all threads
+ uint64_t get_sum_decisions(); //get total number of decisions of all time made by all threads
+
+ void print_stats() const; //print solving stats. Call after solve()/simplify()
+ void set_drat(std::ostream* os, bool set_ID); //set drat to ostream, e.g. stdout or a file
+ void interrupt_asap(); //call this asynchronously, and the solver will try to cleanly abort asap
+ void open_file_and_dump_irred_clauses(std::string fname) const; //dump irredundant clauses to this file when solving finishes
+ void open_file_and_dump_red_clauses(std::string fname) const; //dump redundant ("learnt") clauses to this file when solving finishes
+ void add_in_partial_solving_stats(); //used only by Ctrl+C handler. Ignore.
+
+ ////////////////////////////
+ // Extract useful information from the solver
+ // This can be used in the theory solver
+
+ ////////////////////////////
+ std::vector<Lit> get_zero_assigned_lits() const; //get literals of fixed value
+ std::vector<std::pair<Lit, Lit> > get_all_binary_xors() const; //get all binary XORs that are = 0
+
+ //////////////////////
+ // EXPERIMENTAL
+ std::vector<std::pair<std::vector<uint32_t>, bool> > get_recovered_xors(bool elongate) const; //get XORs recovered. If "elongate" is TRUE, then variables shared ONLY by two XORs will be XORed together
+
+ //////////////////////
+ //Below must be done in-order. Multi-threading not allowed.
+ // EXPERIMENTAL!!!
+
+ void start_getting_small_clauses(uint32_t max_len, uint32_t max_glue);
+ bool get_next_small_clause(std::vector<Lit>& ret); //returns FALSE if no more
+ void end_getting_small_clauses();
+
+ private:
+
+ ////////////////////////////
+ // Do not bother with this, it's private
+ ////////////////////////////
+
+ CMSatPrivateData *data;
+ };
+}
+
+#endif //__CRYPTOMINISAT5_H__
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback