blob: f68fafdd328114744dbf76151ddd07e755051880 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Created on: 29 févr. 2012
*
* Contributors:
* Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
* - Initial API and implementation
******************************************************************************/
#ifndef SOLVER_SOLVERDEF_H_
#define SOLVER_SOLVERDEF_H_
/**
* DEFINE MACRO W.R.T. LICENSE CONSTRAINT
*/
#if defined( _ECLIPSE_PUBLIC_LICENSE_ )
//// Default
//#define _AVM_SOLVER_CVC4_
//
//// Incubation
//#define _AVM_SOLVER_Z3_
// Experimental
#if defined( _AVM_SOLVER_YICES_V2_ )
#undef _AVM_SOLVER_YICES_V2_
#endif /* _AVM_SOLVER_YICES_V2_ */
// Deprecated
#if defined( _AVM_SOLVER_OMEGA_ )
#undef _AVM_SOLVER_OMEGA_
#endif /* _AVM_SOLVER_OMEGA_ */
#else
//// Default
//#if not defined( _AVM_SOLVER_CVC4_ )
//#define _AVM_SOLVER_CVC4_
//#endif /* _AVM_SOLVER_CVC4_ */
//
//// Incubation
//#if not defined( _AVM_SOLVER_Z3_ )
//#define _AVM_SOLVER_Z3_
//#endif /* _AVM_SOLVER_Z3_ */
//
//// Experimental
//#if not defined( _AVM_SOLVER_YICES_V2_ )
//#define _AVM_SOLVER_YICES_V2_
//#endif /* _AVM_SOLVER_YICES_V2_ */
//
//
//// Deprecated
//#if not defined( _AVM_SOLVER_OMEGA_ )
//#define _AVM_SOLVER_OMEGA_
//#endif /* _AVM_SOLVER_OMEGA_ */
#endif /* _ECLIPSE_PUBLIC_LICENSE_ */
#include <string>
//#if defined( _AVM_SOLVER_OMEGA_ )
//
//#endif /* _AVM_SOLVER_OMEGA_ */
//#if defined( _AVM_SOLVER_CVC4_ )
//
//#elif defined( _AVM_SOLVER_CVC3_ )
//
//#endif /* _AVM_SOLVER_CVC_ */
//
//
//#if defined( _AVM_SOLVER_YICES_V2_ )
//
//#elif defined( _AVM_SOLVER_YICES_V1_ )
//
//#endif /* _AVM_SOLVER_YICES_ */
//
//
//#if defined( _AVM_SOLVER_Z3_ )
//
//#endif /* _AVM_SOLVER_Z3_ */
namespace sep
{
class OutStream;
class SolverDef
{
public:
/**
* TYPE DECLARATIONS
*/
enum SATISFIABILITY_RING {
UNSATISFIABLE = 0,
SATISFIABLE = 1,
ABORT_SAT,
UNKNOWN_SAT
};
enum VALIDITY_RING {
INVALID = 0,
VALID = 1,
ABORT_VALID,
UNKNOWN_VALID
};
/**
* TYPE DECLARATIONS
*/
enum SOLVER_KIND
{
SOLVER_UNDEFINED_KIND = 0x0000,
SOLVER_OMEGA_KIND = 0x00001,
SOLVER_YICES1_KIND = 0x00010,
SOLVER_YICES2_KIND = 0x00020,
SOLVER_YICES_KIND = SOLVER_YICES1_KIND
| SOLVER_YICES2_KIND,
SOLVER_Z3_KIND = 0x00100,
SOLVER_CVC3_KIND = 0x01000,
SOLVER_CVC3_BV32_KIND = 0x02000,
SOLVER_CVC4_KIND = 0x04000,
SOLVER_CVC4_BV32_KIND = 0x08000,
SOLVER_CVC_KIND = SOLVER_CVC3_KIND
| SOLVER_CVC4_KIND,
SOLVER_CVC_BV_KIND = SOLVER_CVC3_BV32_KIND
| SOLVER_CVC4_BV32_KIND
};
public:
/**
* CONSTRUCTOR
* Default
*/
SolverDef()
{
//!! NOTHING
}
/**
* DESTRUCTOR
*/
virtual ~SolverDef()
{
//!! NOTHING
}
/**
* ATTRIBUTES
*/
static bool DEFAULT_SOLVER_USAGE_FLAG;
static SolverDef::SOLVER_KIND DEFAULT_SOLVER_KIND;
/**
* toString
*/
static std::string strSatisfiability(SATISFIABILITY_RING ring);
static std::string strValidity(VALIDITY_RING ring);
static std::string strSolver(SOLVER_KIND king);
/**
* toSolver
*/
static SOLVER_KIND toSolver(std::string strKing,
SOLVER_KIND defaultKind /*= SOLVER_UNDEFINED_KIND*/);
/**
* SOLVER
* Available
* List
*/
static bool isAvailableSolver(SOLVER_KIND king);
static void toStreamSolverList(OutStream & os,
const std::string & aHeader = "solvers");
};
} /* namespace sep */
#endif /* SOLVER_SOLVERDEF_H_ */