# HG changeset patch
# User Balazs Dezso <deba@inf.elte.hu>
# Date 1235429069 -3600
# Node ID ba124394367a55cc36b851a808f3f3218abf8367
# Parent  0fec6a017eaddac797518d40c102144176c47fad
Automatic GLPK env deallocation (#213)

diff -r 0fec6a017ead -r ba124394367a lemon/glpk.cc
--- a/lemon/glpk.cc	Mon Feb 23 22:54:25 2009 +0100
+++ b/lemon/glpk.cc	Mon Feb 23 23:44:29 2009 +0100
@@ -526,6 +526,8 @@
     glp_free_env();
   }
 
+  GlpkBase::FreeEnvHelper GlpkBase::freeEnvHelper;
+
   // GlpkLp members
 
   GlpkLp::GlpkLp()
diff -r 0fec6a017ead -r ba124394367a lemon/glpk.h
--- a/lemon/glpk.h	Mon Feb 23 22:54:25 2009 +0100
+++ b/lemon/glpk.h	Mon Feb 23 23:44:29 2009 +0100
@@ -100,16 +100,20 @@
 
     virtual void _clear();
 
+  private:
+
+    static void freeEnv();
+
+    struct FreeEnvHelper {
+      ~FreeEnvHelper() {
+        freeEnv();
+      }
+    };
+    
+    static FreeEnvHelper freeEnvHelper;
+    
   public:
 
-    /// \brief Deallocates the globally allocated memory of GLPK.
-
-    /// Deallocates the globally allocated memory of GLPK.  \note
-    /// Usually, it do not have to be called, because the GLPK use
-    /// only a small amount of global memory, and it is deallocated
-    /// automatically at the end of program.
-    static void freeEnv();
-
     ///Pointer to the underlying GLPK data structure.
     LPX *lpx() {return lp;}
     ///Const pointer to the underlying GLPK data structure.
diff -r 0fec6a017ead -r ba124394367a test/lp_test.cc
--- a/test/lp_test.cc	Mon Feb 23 22:54:25 2009 +0100
+++ b/test/lp_test.cc	Mon Feb 23 23:44:29 2009 +0100
@@ -366,7 +366,6 @@
     lpTest(lp_glpk1);
     aTest(lp_glpk2);
   }
-  GlpkLp::freeEnv();
 #endif
 
 #ifdef HAVE_CPLEX
diff -r 0fec6a017ead -r ba124394367a test/mip_test.cc
--- a/test/mip_test.cc	Mon Feb 23 22:54:25 2009 +0100
+++ b/test/mip_test.cc	Mon Feb 23 23:44:29 2009 +0100
@@ -115,7 +115,6 @@
     GlpkMip mip1;
     aTest(mip1);
   }
-  GlpkLp::freeEnv();
 #endif
 
 #ifdef HAVE_CPLEX