lemon/glpk.h
changeset 844 a6eb9698c321
parent 746 e4554cd6b2bf
parent 832 5100072d83ca
child 877 141f9c0db4a3
equal deleted inserted replaced
10:ae2b0f1eda1d 12:3fec802e7cf5
    23 ///\brief Header of the LEMON-GLPK lp solver interface.
    23 ///\brief Header of the LEMON-GLPK lp solver interface.
    24 ///\ingroup lp_group
    24 ///\ingroup lp_group
    25 
    25 
    26 #include <lemon/lp_base.h>
    26 #include <lemon/lp_base.h>
    27 
    27 
    28 // forward declaration
       
    29 #if !defined _GLP_PROB && !defined GLP_PROB
       
    30 #define _GLP_PROB
       
    31 #define GLP_PROB
       
    32 typedef struct { double _opaque_prob; } glp_prob;
       
    33 /* LP/MIP problem object */
       
    34 #endif
       
    35 
       
    36 namespace lemon {
    28 namespace lemon {
    37 
    29 
       
    30   namespace _solver_bits {
       
    31     class VoidPtr {
       
    32     private:
       
    33       void *_ptr;      
       
    34     public:
       
    35       VoidPtr() : _ptr(0) {}
       
    36 
       
    37       template <typename T>
       
    38       VoidPtr(T* ptr) : _ptr(reinterpret_cast<void*>(ptr)) {}
       
    39 
       
    40       template <typename T>
       
    41       VoidPtr& operator=(T* ptr) { 
       
    42         _ptr = reinterpret_cast<void*>(ptr); 
       
    43         return *this;
       
    44       }
       
    45 
       
    46       template <typename T>
       
    47       operator T*() const { return reinterpret_cast<T*>(_ptr); }
       
    48     };
       
    49   }
    38 
    50 
    39   /// \brief Base interface for the GLPK LP and MIP solver
    51   /// \brief Base interface for the GLPK LP and MIP solver
    40   ///
    52   ///
    41   /// This class implements the common interface of the GLPK LP and MIP solver.
    53   /// This class implements the common interface of the GLPK LP and MIP solver.
    42   /// \ingroup lp_group
    54   /// \ingroup lp_group
    43   class GlpkBase : virtual public LpBase {
    55   class GlpkBase : virtual public LpBase {
    44   protected:
    56   protected:
    45 
    57 
    46     typedef glp_prob LPX;
    58     _solver_bits::VoidPtr lp;
    47     glp_prob* lp;
       
    48 
    59 
    49     GlpkBase();
    60     GlpkBase();
    50     GlpkBase(const GlpkBase&);
    61     GlpkBase(const GlpkBase&);
    51     virtual ~GlpkBase();
    62     virtual ~GlpkBase();
    52 
    63 
   121     int _message_level;
   132     int _message_level;
   122     
   133     
   123   public:
   134   public:
   124 
   135 
   125     ///Pointer to the underlying GLPK data structure.
   136     ///Pointer to the underlying GLPK data structure.
   126     LPX *lpx() {return lp;}
   137     _solver_bits::VoidPtr lpx() {return lp;}
   127     ///Const pointer to the underlying GLPK data structure.
   138     ///Const pointer to the underlying GLPK data structure.
   128     const LPX *lpx() const {return lp;}
   139     _solver_bits::VoidPtr lpx() const {return lp;}
   129 
   140 
   130     ///Returns the constraint identifier understood by GLPK.
   141     ///Returns the constraint identifier understood by GLPK.
   131     int lpxRow(Row r) const { return rows(id(r)); }
   142     int lpxRow(Row r) const { return rows(id(r)); }
   132 
   143 
   133     ///Returns the variable identifier understood by GLPK.
   144     ///Returns the variable identifier understood by GLPK.