⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zchaff_wrapper.wrp

📁 这是一种很好的SAT解析器。通过它
💻 WRP
📖 第 1 页 / 共 2 页
字号:
/********************************************************************* Copyright 2000-2004, Princeton University.  All rights reserved.  By using this software the USER indicates that he or she has read,  understood and will comply with the following: --- Princeton University hereby grants USER nonexclusive permission  to use, copy and/or modify this software for internal, noncommercial, research purposes only. Any distribution, including commercial sale  or license, of this software, copies of the software, its associated  documentation and/or modifications of either is strictly prohibited  without the prior consent of Princeton University.  Title to copyright to this software and its associated documentation shall at all times  remain with Princeton University.  Appropriate copyright notice shall  be placed on all software copies, and a complete copy of this notice  shall be included in all copies of the associated documentation.   No right is  granted to use in advertising, publicity or otherwise  any trademark,  service mark, or the name of Princeton University.  --- This software and any associated documentation is provided "as is"  PRINCETON UNIVERSITY MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS  OR IMPLIED, INCLUDING THOSE OF MERCHANTABILITY OR FITNESS FOR A  PARTICULAR PURPOSE, OR THAT  USE OF THE SOFTWARE, MODIFICATIONS, OR  ASSOCIATED DOCUMENTATION WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS,  TRADEMARKS OR OTHER INTELLECTUAL PROPERTY RIGHTS OF A THIRD PARTY.   Princeton University shall not be liable under any circumstances for  any direct, indirect, special, incidental, or consequential damages  with respect to any claim by USER or any third party on account of  or arising from the use, or inability to use, this software or its  associated documentation, even if Princeton University has been advised of the possibility of those damages.*********************************************************************/#include "zchaff_solver.h"#include "zchaff_clsgen.h"#include <fstream>#ifndef SAT_Manager#define SAT_Manager void *#endif//#define GEN_CALL_TRACE#ifdef GEN_CALL_TRACE#define TRACE(x)	xofstream trace_os("sat_call_trace");#else#define TRACE(x)	#endif/*=====================================================================Following are wrapper functions for C/C++ callers.  ====================================================================*/EXTERN SAT_Manager SAT_InitManager(void){    CSolver * solver = new CSolver;    TRACE(trace_os << "SAT_InitManager\t" << solver << endl;);    return (SAT_Manager)solver;}EXTERN char * SAT_Version(SAT_Manager mng){    CSolver * solver = (CSolver*) mng;    TRACE(trace_os << "SAT_Version\t" << mng << "\t" << solver->version() << endl;);    return solver->version();}EXTERN void SAT_SetNumVariables(SAT_Manager mng, 				    int n_var){    CSolver * solver = (CSolver*) mng;    TRACE(trace_os << "SAT_SetNumVariables\t" << mng << " " << n_var << endl; );    solver->set_variable_number(n_var);}EXTERN void SAT_ReleaseManager(SAT_Manager mng){    CSolver * solver = (CSolver*) mng;    TRACE(trace_os << "SAT_ReleaseManager\t" << mng << endl;);    delete solver;}EXTERN int SAT_AddVariable	(SAT_Manager 	mng){    CSolver * solver = (CSolver*) mng;    int vid = solver->add_variable();    TRACE(trace_os << "SAT_AddVariable\t" << mng << "\t" << vid <<endl;);    return vid;}EXTERN void  SAT_EnableVarBranch(SAT_Manager mng, int vid){    CSolver * solver = (CSolver*) mng;    TRACE(trace_os << "SAT_EnableVarBranch\t" << mng << " " << vid << endl;);    solver->mark_var_branchable(vid);}EXTERN void SAT_DisableVarBranch(SAT_Manager mng, int vid){    CSolver * solver = (CSolver*) mng;    TRACE(trace_os << "SAT_DisableVarBranch\t" << mng << " " << vid << endl;);    solver->mark_var_unbranchable(vid);}EXTERN void SAT_SetTimeLimit	(SAT_Manager 	mng ,  				 float 		runtime){    CSolver * solver = (CSolver*) mng;    TRACE(trace_os << "SAT_SetTimeLimit\t" << mng << " " << runtime << endl;);    solver->set_time_limit(runtime);}EXTERN void SAT_SetMemLimit	(SAT_Manager 	mng, 				 int 		mem_limit){    CSolver * solver = (CSolver*) mng;    TRACE(trace_os << "SAT_SetMemLimit\t" << mng << " " << mem_limit << endl;);    solver->set_mem_limit(mem_limit);}EXTERN void SAT_AddClause	(SAT_Manager 	mng, 				 int * 		clause_lits,				 int 		num_lits, 				 int		gid = 0){    CSolver * solver = (CSolver*) mng;    TRACE(trace_os << "SAT_AddClause\t" << mng << " ";	  for (int i=0; i< num_lits; ++i) {  trace_os << clause_lits[i] << " "; }	  trace_os << num_lits << " " << gid << endl; );    solver->add_orig_clause(clause_lits, num_lits, gid);}EXTERN void SAT_DeleteClauseGroup (SAT_Manager mng,			    int		gid){    CSolver * solver = (CSolver*) mng;    TRACE(trace_os << "SAT_DeleteClauseGroup\t" << mng << " " << gid << endl;);    solver->delete_clause_group(gid);}EXTERN void SAT_Reset	(SAT_Manager mng){    CSolver * solver = (CSolver*) mng;    TRACE(trace_os << "SAT_Reset\t" << mng << endl;);    solver->reset();}EXTERN int SAT_MergeClauseGroup	(SAT_Manager mng,				 int	gid1,				 int 	gid2){    CSolver * solver = (CSolver*) mng;    int g = solver->merge_clause_group(gid1, gid2);     TRACE( trace_os << "SAT_MergeClauseGroup\t" << mng 	   << " " << gid1 << " " << gid2 << "\t" << g;);    return g;}EXTERN int SAT_AllocClauseGroupID (SAT_Manager mng) {    CSolver * solver = (CSolver*) mng;    int gid = solver->alloc_gid();    TRACE ( trace_os << "SAT_AllocClauseGroupID\t" << mng << "\t" << gid << endl;);    return gid;}EXTERN int SAT_GetGlobalGroupID (SAT_Manager mng) {    TRACE ( trace_os << "SAT_GetGlobalGroupID\t" << mng << "\t" << 0 << endl;);    return 0;}EXTERN int SAT_GetVolatileGroupID (SAT_Manager mng) {    TRACE ( trace_os << "SAT_GetVolatileGroupID\t" << mng << "\t" << -1 << endl;);    return -1;}EXTERN int SAT_Solve 	(SAT_Manager 	mng){    CSolver * solver = (CSolver*) mng;    int result = solver->solve();    TRACE ( trace_os << "SAT_Solve\t" << mng << "\t" << result << endl;);    return result;}EXTERN void SAT_AddHookFun 	(SAT_Manager	mng, 				 void(*fun)(void *),				 int 		interval){    CSolver * solver = (CSolver*) mng;	    TRACE ( trace_os << "SAT_AddHookFun\t" << mng 	    << " " << fun << " " << interval << endl;);    solver->add_hook(fun, interval);}	EXTERN void SAT_MakeDecision	(SAT_Manager	mng,				int		vid,				int		sign){    CSolver * solver = (CSolver*) mng;	    TRACE ( trace_os << "SAT_MakeDecision\t" << mng 	    << " " << vid << " " << sign << endl;);    solver->make_decision(vid+vid+sign);}EXTERN void SAT_SetRandomness	(SAT_Manager	mng,				 int 		n){    CSolver * solver = (CSolver*) mng;	    TRACE ( trace_os << "SAT_SetRandomness\t" << mng<< " " << n << endl;);    solver->set_randomness(n);}EXTERN void SAT_SetRandSeed	(SAT_Manager	mng,				 int		seed){    CSolver * solver = (CSolver*) mng;	    TRACE ( trace_os << "SAT_SetRandSeed\t" << mng<< " " << seed << endl;);    solver->set_random_seed(seed);}EXTERN int SAT_GetVarAsgnment	(SAT_Manager	mng,					 int 		v_idx){    CSolver * solver = (CSolver*) mng;    assert (v_idx > 0 && v_idx < (int) solver->variables().size());    int v = solver->variable(v_idx).value();	    TRACE ( trace_os << "SAT_GetVarAsgnment\t" << mng<< " " 	    << v_idx << "\t" << v << endl;);    return v; }	EXTERN int SAT_EstimateMemUsage(SAT_Manager mng){    CSolver * solver = (CSolver*) mng;    int usage = solver->estimate_mem_usage();    TRACE (trace_os << "SAT_EstimateMemUsage\t" << mng << "\t" << usage << endl;);    return usage;}EXTERN float SAT_GetElapsedCPUTime(SAT_Manager	mng){    CSolver * solver = (CSolver*) mng;	    float time = solver->elapsed_cpu_time();    TRACE (trace_os << "SAT_GetElapsedCPUTime\t" << mng << "\t" << time << endl;);    return time;}EXTERN float SAT_GetCurrentCPUTime(SAT_Manager	mng){    CSolver * solver = (CSolver*) mng;	    float time = get_cpu_time()/1000.0;    TRACE (trace_os << "SAT_GetCurrentCPUTime\t" << mng << "\t" << time << endl;);    return time;}EXTERN float SAT_GetCPUTime	(SAT_Manager	mng){    CSolver * solver = (CSolver*) mng;	    float time = solver->cpu_run_time();    TRACE (trace_os << "SAT_GetCPUTime\t" << mng << "\t" << time << endl;);    return time;}EXTERN int SAT_NumLiterals	(SAT_Manager mng){    CSolver * solver = (CSolver*) mng;	    int n = solver->num_literals();    TRACE (trace_os << "SAT_NumLiterals\t" << mng << "\t" << n << endl;);    return n;}EXTERN int SAT_NumClauses	(SAT_Manager mng){    CSolver * solver = (CSolver*) mng;	    int n = solver->num_clauses();    TRACE (trace_os << "SAT_NumClauses\t" << mng << "\t" << n << endl;);    return n;}EXTERN int SAT_NumVariables	(SAT_Manager mng){    CSolver * solver = (CSolver*) mng;	    int n = solver->num_variables();    TRACE (trace_os << "SAT_NumVariables\t" << mng << "\t" << n << endl;);    return n;}EXTERN int SAT_InitNumLiterals(SAT_Manager mng){    CSolver * solver = (CSolver*) mng;	    int n = solver->init_num_literals();    TRACE (trace_os << "SAT_InitNumLiterals\t" << mng << "\t" << n << endl;);    return n;}EXTERN int SAT_InitNumClauses(SAT_Manager mng){    CSolver * solver = (CSolver*) mng;	    int n = solver->init_num_clauses();    TRACE (trace_os << "SAT_InitNumClauses\t" << mng << "\t" << n << endl;);    return n;}EXTERN long64 SAT_NumAddedLiterals(SAT_Manager mng){    CSolver * solver = (CSolver*) mng;	    long64 n = solver->num_added_literals();    TRACE (trace_os << "SAT_NumAddedLiterals\t" << mng << "\t" << n << endl;);    return n;}EXTERN int SAT_NumAddedClauses	(SAT_Manager mng){    CSolver * solver = (CSolver*) mng;	    int  n =  solver->num_added_clauses();    TRACE (trace_os << "SAT_NumAddedClauses\t" << mng << "\t" << n << endl;);    return n;}EXTERN int SAT_NumDeletedClauses	(SAT_Manager mng){    CSolver * solver = (CSolver*) mng;	    int n = solver->num_deleted_clauses();    TRACE (trace_os << "SAT_NumDeletedClauses\t" << mng << "\t" << n << endl;);    return n;}EXTERN int SAT_NumDelOrigCls	(SAT_Manager mng){    CSolver * solver = (CSolver*) mng;	    int n = solver->num_del_orig_cls();    TRACE (trace_os << "SAT_NumDeletedOriginalClauses\t" << mng << "\t" << n << endl;);    return n;}EXTERN long64 SAT_NumDeletedLiterals	(SAT_Manager mng){    CSolver * solver = (CSolver*) mng;	    long64 n = solver->num_deleted_literals();    TRACE (trace_os << "SAT_NumDeletedLiterals\t" << mng << "\t" << n << endl;);    return n;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -