| /******************************************************************************* |
| * 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 |
| * |
| * Contributors: |
| * Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr |
| * - Initial API and implementation |
| ******************************************************************************/ |
| #ifndef SOLVER_ABSTRACTSOLVER_H_ |
| #define SOLVER_ABSTRACTSOLVER_H_ |
| |
| #include <common/RunnableElement.h> |
| |
| #include <collection/Typedef.h> |
| |
| #include <fml/executable/InstanceOfData.h> |
| |
| #include <fml/runtime/RuntimeID.h> |
| |
| #include <solver/api/SolverDef.h> |
| |
| |
| namespace sep |
| { |
| |
| class BF; |
| |
| class Configuration; |
| |
| class ExecutionContext; |
| |
| class ExecutionData; |
| |
| class WObject; |
| |
| |
| class SatSolver : public RunnableElement |
| { |
| |
| protected: |
| /** |
| * ATTRIBUTES |
| */ |
| ListOfPairMachineData mListOfSelectedVariable; |
| |
| bool mCurrentPathScopeFlag; |
| |
| std::string mLogFolderLocation; |
| |
| |
| public: |
| /** |
| * CONSTRUCTOR |
| * Default |
| */ |
| SatSolver() |
| : RunnableElement( NULL ), |
| mListOfSelectedVariable( ), |
| mCurrentPathScopeFlag( false ), |
| mLogFolderLocation( ) |
| { |
| //!! NOTHING |
| } |
| |
| /** |
| * DESTRUCTOR |
| */ |
| virtual ~SatSolver() |
| { |
| //!! NOTHING |
| } |
| |
| /** |
| * CONFIGURE |
| */ |
| virtual bool configure( |
| Configuration & aConfiguration, WObject * wfFilterObject, |
| ListOfPairMachineData & listOfSelectedVariable); |
| |
| |
| /** |
| * INIT / EXIT |
| */ |
| virtual bool initImpl() |
| { |
| //!! NOTHING |
| return true; |
| } |
| |
| virtual bool exitImpl() |
| { |
| //!! NOTHING |
| return true; |
| } |
| |
| /** |
| * GETTER - SETTER |
| * mListOfSelectedVariable |
| */ |
| inline ListOfPairMachineData & getSelectedVariable() |
| { |
| return( mListOfSelectedVariable ); |
| } |
| |
| inline bool hasSelectedVariable() |
| { |
| return( mListOfSelectedVariable.nonempty() ); |
| } |
| |
| inline virtual void setSelectedVariable(ListOfPairMachineData & aList) |
| { |
| mListOfSelectedVariable = aList; |
| } |
| |
| inline virtual void setSelectedVariable( |
| const ExecutionData & apED, ListOfPairMachineData & aList) |
| { |
| mListOfSelectedVariable = aList; |
| } |
| |
| |
| /** |
| * GETTER - SETTER |
| * mCurrentPathScopeFlag |
| */ |
| inline bool isCurrentPathScope() |
| { |
| return( mCurrentPathScopeFlag ); |
| } |
| |
| inline void setCurrentPathScope(bool aCurrentPathScopeFlag) |
| { |
| mCurrentPathScopeFlag = aCurrentPathScopeFlag; |
| } |
| |
| |
| /** |
| * GETTER - SETTER |
| * mLogFolderLocation |
| */ |
| inline std::string getLogFolderLocation() |
| { |
| return( mLogFolderLocation ); |
| } |
| |
| inline void setLogFolderLocation(const std::string & aLocation) |
| { |
| mLogFolderLocation = aLocation; |
| } |
| |
| |
| |
| /** |
| * PROVER |
| */ |
| virtual bool isSubSet( |
| const ExecutionContext & newEC, |
| const ExecutionContext & oldEC) = 0; |
| |
| virtual bool isEqualSet( |
| const ExecutionContext & newEC, |
| const ExecutionContext & oldEC) = 0; |
| |
| virtual SolverDef::SATISFIABILITY_RING isSatisfiable( |
| const BF & aCondition) = 0; |
| |
| |
| /** |
| * SOLVER |
| * an empty << dataVector >> compute by the solver |
| * an empty << valuesVector >> compute by the solver |
| */ |
| bool solve(const BF & aCondition, |
| BFVector & dataVector, BFVector & valuesVector); |
| |
| virtual bool solveImpl(const BF & aCondition, |
| BFVector & dataVector, BFVector & valuesVector) = 0; |
| |
| |
| BF completeUsingDataTypeConstraint( |
| const BF & aCondition, BFVector & dataVector) const; |
| |
| }; |
| |
| } |
| |
| #endif /*SOLVER_ABSTRACTSOLVER_H_*/ |