COIN-OR::LEMON - Graph Library

Changeset 589:fc6c7aab4b8d in lemon


Ignore:
Timestamp:
03/04/09 14:43:05 (9 years ago)
Author:
Alpar Juttner <alpar@…>
Branch:
default
Parents:
588:89e29e22d479 (diff), 585:ba124394367a (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • lemon/glpk.cc

    r585 r589  
    541541  } 
    542542 
    543   GlpkLp* GlpkLp::_newSolver() const { return new GlpkLp; } 
    544   GlpkLp* GlpkLp::_cloneSolver() const { return new GlpkLp(*this); } 
     543  GlpkLp* GlpkLp::newSolver() const { return new GlpkLp; } 
     544  GlpkLp* GlpkLp::cloneSolver() const { return new GlpkLp(*this); } 
    545545 
    546546  const char* GlpkLp::_solverName() const { return "GlpkLp"; } 
     
    947947  } 
    948948 
    949   GlpkMip* GlpkMip::_newSolver() const { return new GlpkMip; } 
    950   GlpkMip* GlpkMip::_cloneSolver() const {return new GlpkMip(*this); } 
     949  GlpkMip* GlpkMip::newSolver() const { return new GlpkMip; } 
     950  GlpkMip* GlpkMip::cloneSolver() const {return new GlpkMip(*this); } 
    951951 
    952952  const char* GlpkMip::_solverName() const { return "GlpkMip"; } 
  • lemon/glpk.cc

    r587 r589  
    522522    cols.clear(); 
    523523  } 
     524 
     525  void GlpkBase::freeEnv() { 
     526    glp_free_env(); 
     527  } 
     528 
     529  GlpkBase::FreeEnvHelper GlpkBase::freeEnvHelper; 
    524530 
    525531  // GlpkLp members 
  • lemon/glpk.h

    r585 r589  
    132132  /// This class implements an interface for the GLPK LP solver. 
    133133  ///\ingroup lp_group 
    134   class GlpkLp : public GlpkBase, public LpSolver { 
     134  class GlpkLp : public LpSolver, public GlpkBase { 
    135135  public: 
    136136 
     
    139139    ///\e 
    140140    GlpkLp(const GlpkLp&); 
     141 
     142    ///\e 
     143    virtual GlpkLp* cloneSolver() const; 
     144    ///\e 
     145    virtual GlpkLp* newSolver() const; 
    141146 
    142147  private: 
     
    148153 
    149154  protected: 
    150  
    151     virtual GlpkLp* _cloneSolver() const; 
    152     virtual GlpkLp* _newSolver() const; 
    153155 
    154156    virtual const char* _solverName() const; 
     
    166168    virtual Value _getDualRay(int i) const; 
    167169 
    168     ///\todo It should be clarified 
    169     /// 
    170170    virtual ProblemType _getPrimalType() const; 
    171171    virtual ProblemType _getDualType() const; 
     
    216216  /// This class implements an interface for the GLPK MIP solver. 
    217217  ///\ingroup lp_group 
    218   class GlpkMip : public GlpkBase, public MipSolver { 
     218  class GlpkMip : public MipSolver, public GlpkBase { 
    219219  public: 
    220220 
     
    224224    GlpkMip(const GlpkMip&); 
    225225 
    226   protected: 
    227  
    228     virtual GlpkMip* _cloneSolver() const; 
    229     virtual GlpkMip* _newSolver() const; 
     226    virtual GlpkMip* cloneSolver() const; 
     227    virtual GlpkMip* newSolver() const; 
     228 
     229  protected: 
    230230 
    231231    virtual const char* _solverName() const; 
  • lemon/glpk.h

    r588 r589  
    101101    virtual void _clear(); 
    102102 
     103  private: 
     104 
     105    static void freeEnv(); 
     106 
     107    struct FreeEnvHelper { 
     108      ~FreeEnvHelper() { 
     109        freeEnv(); 
     110      } 
     111    }; 
     112     
     113    static FreeEnvHelper freeEnvHelper; 
     114     
    103115  public: 
    104116 
  • test/lp_test.cc

    r585 r589  
    198198    check(const_cast<const LpSolver::Expr&>(e)[p2]==0, buf.str()); 
    199199 
     200    //Test for clone/new 
     201    LP* lpnew = lp.newSolver(); 
     202    LP* lpclone = lp.cloneSolver(); 
     203    delete lpnew; 
     204    delete lpclone; 
    200205 
    201206  } 
     
    248253  if (stat ==  LpSolver::OPTIMAL) { 
    249254    std::ostringstream sbuf; 
    250     sbuf << "Wrong optimal value: the right optimum is " << exp_opt; 
     255    sbuf << "Wrong optimal value (" << lp.primal() <<") with " 
     256         << lp.solverName() <<"\n     the right optimum is " << exp_opt; 
    251257    check(std::abs(lp.primal()-exp_opt) < 1e-3, sbuf.str()); 
    252258  } 
     
    356362} 
    357363 
     364template<class LP> 
     365void cloneTest() 
     366{ 
     367  //Test for clone/new 
     368   
     369  LP* lp = new LP(); 
     370  LP* lpnew = lp->newSolver(); 
     371  LP* lpclone = lp->cloneSolver(); 
     372  delete lp; 
     373  delete lpnew; 
     374  delete lpclone; 
     375} 
     376 
    358377int main() 
    359378{ 
     
    366385    lpTest(lp_glpk1); 
    367386    aTest(lp_glpk2); 
     387    cloneTest<GlpkLp>(); 
    368388  } 
    369389#endif 
     
    382402#endif 
    383403  } 
     404    cloneTest<CplexLp>(); 
    384405#endif 
    385406 
     
    389410    lpTest(lp_soplex1); 
    390411    aTest(lp_soplex2); 
     412    cloneTest<SoplexLp>(); 
    391413  } 
    392414#endif 
     
    397419    lpTest(lp_clp1); 
    398420    aTest(lp_clp2); 
     421    cloneTest<ClpLp>(); 
    399422  } 
    400423#endif 
  • test/mip_test.cc

    r585 r589  
    107107} 
    108108 
     109template<class MIP> 
     110void cloneTest() 
     111{ 
     112   
     113  MIP* mip = new MIP(); 
     114  MIP* mipnew = mip->newSolver(); 
     115  MIP* mipclone = mip->cloneSolver(); 
     116  delete mip; 
     117  delete mipnew; 
     118  delete mipclone; 
     119} 
    109120 
    110121int main() 
     
    115126    GlpkMip mip1; 
    116127    aTest(mip1); 
     128    cloneTest<GlpkMip>(); 
    117129  } 
    118130#endif 
     
    130142#endif 
    131143  } 
     144  cloneTest<CplexMip>(); 
    132145#endif 
    133146 
Note: See TracChangeset for help on using the changeset viewer.