gravatar
deba@inf.elte.hu
deba@inf.elte.hu
Automatic GLPK env deallocation (#213)
0 4 0
default
4 files changed with 14 insertions and 10 deletions:
↑ Collapse diff ↑
Ignore white space 16 line context
... ...
@@ -521,16 +521,18 @@
521 521
    rows.clear();
522 522
    cols.clear();
523 523
  }
524 524

	
525 525
  void GlpkBase::freeEnv() {
526 526
    glp_free_env();
527 527
  }
528 528

	
529
  GlpkBase::FreeEnvHelper GlpkBase::freeEnvHelper;
530

	
529 531
  // GlpkLp members
530 532

	
531 533
  GlpkLp::GlpkLp()
532 534
    : LpBase(), GlpkBase(), LpSolver() {
533 535
    messageLevel(MESSAGE_NO_OUTPUT);
534 536
  }
535 537

	
536 538
  GlpkLp::GlpkLp(const GlpkLp& other)
Ignore white space 6 line context
... ...
@@ -95,26 +95,30 @@
95 95
    virtual void _setObjCoeff(int i, Value obj_coef);
96 96
    virtual Value _getObjCoeff(int i) const;
97 97

	
98 98
    virtual void _setSense(Sense);
99 99
    virtual Sense _getSense() const;
100 100

	
101 101
    virtual void _clear();
102 102

	
103
  private:
104

	
105
    static void freeEnv();
106

	
107
    struct FreeEnvHelper {
108
      ~FreeEnvHelper() {
109
        freeEnv();
110
      }
111
    };
112
    
113
    static FreeEnvHelper freeEnvHelper;
114
    
103 115
  public:
104 116

	
105
    /// \brief Deallocates the globally allocated memory of GLPK.
106

	
107
    /// Deallocates the globally allocated memory of GLPK.  \note
108
    /// Usually, it do not have to be called, because the GLPK use
109
    /// only a small amount of global memory, and it is deallocated
110
    /// automatically at the end of program.
111
    static void freeEnv();
112

	
113 117
    ///Pointer to the underlying GLPK data structure.
114 118
    LPX *lpx() {return lp;}
115 119
    ///Const pointer to the underlying GLPK data structure.
116 120
    const LPX *lpx() const {return lp;}
117 121

	
118 122
    ///Returns the constraint identifier understood by GLPK.
119 123
    int lpxRow(Row r) const { return rows(id(r)); }
120 124

	
Ignore white space 6 line context
... ...
@@ -361,17 +361,16 @@
361 361
  lpTest(lp_skel);
362 362

	
363 363
#ifdef HAVE_GLPK
364 364
  {
365 365
    GlpkLp lp_glpk1,lp_glpk2;
366 366
    lpTest(lp_glpk1);
367 367
    aTest(lp_glpk2);
368 368
  }
369
  GlpkLp::freeEnv();
370 369
#endif
371 370

	
372 371
#ifdef HAVE_CPLEX
373 372
  try {
374 373
    CplexLp lp_cplex1,lp_cplex2;
375 374
    lpTest(lp_cplex1);
376 375
    aTest(lp_cplex2);
377 376
  } catch (CplexEnv::LicenseError& error) {
Ignore white space 6 line context
... ...
@@ -110,17 +110,16 @@
110 110
int main()
111 111
{
112 112

	
113 113
#ifdef HAVE_GLPK
114 114
  {
115 115
    GlpkMip mip1;
116 116
    aTest(mip1);
117 117
  }
118
  GlpkLp::freeEnv();
119 118
#endif
120 119

	
121 120
#ifdef HAVE_CPLEX
122 121
  try {
123 122
    CplexMip mip2;
124 123
    aTest(mip2);
125 124
  } catch (CplexEnv::LicenseError& error) {
126 125
#ifdef LEMON_FORCE_CPLEX_CHECK
0 comments (0 inline)