diff --git a/lemon/lp_soplex.h b/lemon/lp_soplex.h --- a/lemon/lp_soplex.h +++ b/lemon/lp_soplex.h @@ -43,26 +43,30 @@ /// developed at the Konrad-Zuse-Zentrum für Informationstechnik /// Berlin (ZIB). You can find detailed information about it at the /// http://soplex.zib.de address. - class LpSoplex :virtual public LpSolverBase { - protected: - - _lp_bits::RelocateIdHandler relocateIdHandler; + class LpSoplex : public LpSolver { + private: soplex::SoPlex* soplex; - bool solved; - std::vector colNames; - std::map invColNames; + std::vector _col_names; + std::map _col_names_ref; - std::vector primal_value; - std::vector dual_value; + std::vector _row_names; + std::map _row_names_ref; + private: + + // these values cannot be retrieved element by element + mutable std::vector _primal_values; + mutable std::vector _dual_values; + + mutable std::vector _primal_ray; + mutable std::vector _dual_ray; + + void _clear_temporals(); public: - typedef LpSolverBase Parent; - - /// \e LpSoplex(); /// \e @@ -72,48 +76,75 @@ protected: - virtual LpSolverBase* _newLp(); - virtual LpSolverBase* _copyLp(); + virtual LpSoplex* _newSolver() const; + virtual LpSoplex* _cloneSolver() const; + + virtual const char* _solverName() const; virtual int _addCol(); virtual int _addRow(); + virtual void _eraseCol(int i); virtual void _eraseRow(int i); - virtual void _getColName(int col, std::string & name) const; - virtual void _setColName(int col, const std::string & name); + + virtual void _eraseColId(int i); + virtual void _eraseRowId(int i); + + virtual void _getColName(int col, std::string& name) const; + virtual void _setColName(int col, const std::string& name); virtual int _colByName(const std::string& name) const; - virtual void _setRowCoeffs(int i, ConstRowIterator b, ConstRowIterator e); - virtual void _getRowCoeffs(int i, RowIterator b) const; - virtual void _setColCoeffs(int i, ConstColIterator b, ConstColIterator e); - virtual void _getColCoeffs(int i, ColIterator b) const; + + virtual void _getRowName(int row, std::string& name) const; + virtual void _setRowName(int row, const std::string& name); + virtual int _rowByName(const std::string& name) const; + + virtual void _setRowCoeffs(int i, ExprIterator b, ExprIterator e); + virtual void _getRowCoeffs(int i, InsertIterator b) const; + + virtual void _setColCoeffs(int i, ExprIterator b, ExprIterator e); + virtual void _getColCoeffs(int i, InsertIterator b) const; + virtual void _setCoeff(int row, int col, Value value); virtual Value _getCoeff(int row, int col) const; + virtual void _setColLowerBound(int i, Value value); virtual Value _getColLowerBound(int i) const; virtual void _setColUpperBound(int i, Value value); virtual Value _getColUpperBound(int i) const; - virtual void _setRowBounds(int i, Value lower, Value upper); - virtual void _getRowBounds(int i, Value &lower, Value &upper) const; + + virtual void _setRowLowerBound(int i, Value value); + virtual Value _getRowLowerBound(int i) const; + virtual void _setRowUpperBound(int i, Value value); + virtual Value _getRowUpperBound(int i) const; + + virtual void _setObjCoeffs(ExprIterator b, ExprIterator e); + virtual void _getObjCoeffs(InsertIterator b) const; + virtual void _setObjCoeff(int i, Value obj_coef); virtual Value _getObjCoeff(int i) const; - virtual void _clearObj(); + + virtual void _setSense(Sense sense); + virtual Sense _getSense() const; virtual SolveExitStatus _solve(); virtual Value _getPrimal(int i) const; virtual Value _getDual(int i) const; + virtual Value _getPrimalValue() const; - virtual bool _isBasicCol(int i) const; - virtual SolutionStatus _getPrimalStatus() const; - virtual SolutionStatus _getDualStatus() const; - virtual ProblemTypes _getProblemType() const; + virtual Value _getPrimalRay(int i) const; + virtual Value _getDualRay(int i) const; + virtual VarStatus _getColStatus(int i) const; + virtual VarStatus _getRowStatus(int i) const; - virtual void _setMax(); - virtual void _setMin(); - virtual bool _isMax() const; + virtual ProblemType _getPrimalType() const; + virtual ProblemType _getDualType() const; + + virtual void _clear(); }; + } //END OF NAMESPACE LEMON #endif //LEMON_LP_SOPLEX_H