/* $Id$ */ // Copyright (C) 2003, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef ClpPdcoBase_H #define ClpPdcoBase_H #include "CoinPragma.hpp" #include "CoinPackedMatrix.hpp" #include "CoinDenseVector.hpp" #include "ClpConfig.h" class ClpInterior; /** Abstract base class for tailoring everything for Pcdo Since this class is abstract, no object of this type can be created. If a derived class provides all methods then all ClpPcdo algorithms should work. Eventually we should be able to use ClpObjective and ClpMatrixBase. */ class CLPLIB_EXPORT ClpPdcoBase { public: /**@name Virtual methods that the derived classes must provide */ //@{ virtual void matVecMult(ClpInterior *model, int mode, double *x, double *y) const = 0; virtual void getGrad(ClpInterior *model, CoinDenseVector< double > &x, CoinDenseVector< double > &grad) const = 0; virtual void getHessian(ClpInterior *model, CoinDenseVector< double > &x, CoinDenseVector< double > &H) const = 0; virtual double getObj(ClpInterior *model, CoinDenseVector< double > &x) const = 0; virtual void matPrecon(ClpInterior *model, double delta, double *x, double *y) const = 0; //@} //@{ ///@name Other /// Clone virtual ClpPdcoBase *clone() const = 0; /// Returns type inline int type() const { return type_; }; /// Sets type inline void setType(int type) { type_ = type; }; /// Returns size of d1 inline int sizeD1() const { return 1; }; /// Returns d1 as scalar inline double getD1() const { return d1_; }; /// Returns size of d2 inline int sizeD2() const { return 1; }; /// Returns d2 as scalar inline double getD2() const { return d2_; }; //@} protected: /**@name Constructors, destructor
NOTE: All constructors are protected. There's no need to expose them, after all, this is an abstract class. */ //@{ /** Default constructor. */ ClpPdcoBase(); /** Destructor (has to be public) */ public: virtual ~ClpPdcoBase(); protected: // Copy ClpPdcoBase(const ClpPdcoBase &); // Assignment ClpPdcoBase &operator=(const ClpPdcoBase &); //@} protected: /**@name Data members The data members are protected to allow access for derived classes. */ //@{ /// Should be dense vectors double d1_; double d2_; /// type (may be useful) int type_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */