COIN-OR::LEMON - Graph Library

Changeset 589:fc6c7aab4b8d in lemon


Ignore:
Timestamp:
03/04/09 14:43:05 (10 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.
Phase:
public
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.