[Lemon-commits] alpar: r3097 - hugo/trunk/lemon

Lemon SVN svn at lemon.cs.elte.hu
Mon Dec 4 14:13:14 CET 2006


Author: alpar
Date: Mon Dec  4 14:13:14 2006
New Revision: 3097

Modified:
   hugo/trunk/lemon/lp_glpk.cc
   hugo/trunk/lemon/lp_glpk.h

Log:
Copy constructor for LpGlpk

Modified: hugo/trunk/lemon/lp_glpk.cc
==============================================================================
--- hugo/trunk/lemon/lp_glpk.cc	(original)
+++ hugo/trunk/lemon/lp_glpk.cc	Mon Dec  4 14:13:14 2006
@@ -31,6 +31,37 @@
     messageLevel(0);
   }
   
+  LpGlpk::LpGlpk(const LpGlpk &glp) : Parent(glp), 
+				      lp(lpx_create_prob()) {
+    ///\todo constrol function for this:
+    lpx_set_int_parm(lp, LPX_K_DUAL, 1);
+    messageLevel(0);
+    //Coefficient matrix, row bounds
+    lpx_add_rows(lp, lpx_get_num_rows(glp.lp));
+    lpx_add_cols(lp, lpx_get_num_cols(glp.lp));
+    int len;
+    int ind[1+lpx_get_num_cols(glp.lp)];
+    Value val[1+lpx_get_num_cols(glp.lp)];
+    for (int i=1;i<=lpx_get_num_rows(glp.lp);++i)
+      {
+	len=lpx_get_mat_row(glp.lp,i,ind,val);
+	lpx_set_mat_row(lp, i,len,ind,val);
+	lpx_set_row_bnds(lp,i,lpx_get_row_type(glp.lp,i),
+			 lpx_get_row_lb(glp.lp,i),lpx_get_row_ub(glp.lp,i));
+      }
+
+    //Objective function, coloumn bounds
+    lpx_set_obj_dir(lp, lpx_get_obj_dir(glp.lp));
+    //Objectif function's constant term treated separately
+    lpx_set_obj_coef(lp,0,lpx_get_obj_coef(glp.lp,0));
+    for (int i=1;i<=lpx_get_num_cols(glp.lp);++i)
+      {
+	lpx_set_obj_coef(lp,i,lpx_get_obj_coef(glp.lp,i));
+	lpx_set_col_bnds(lp,i,lpx_get_col_type(glp.lp,i),
+			 lpx_get_col_lb(glp.lp,i),lpx_get_col_ub(glp.lp,i));
+      }
+  }
+  
   LpGlpk::~LpGlpk() {
     lpx_delete_prob(lp);
   }
@@ -47,7 +78,7 @@
 
   LpSolverBase &LpGlpk::_newLp()
   {
-    LpGlpk* newlp=new LpGlpk();
+    LpGlpk* newlp=new LpGlpk;
     return *newlp;
   }
   
@@ -55,33 +86,7 @@
 
   LpSolverBase &LpGlpk::_copyLp()
   {
-    LpGlpk* newlp=new LpGlpk();
-
-    //Coefficient matrix, row bounds
-    lpx_add_rows(newlp->lp, lpx_get_num_rows(lp));
-    lpx_add_cols(newlp->lp, lpx_get_num_cols(lp));
-    int len;
-    int ind[1+lpx_get_num_cols(lp)];
-    Value val[1+lpx_get_num_cols(lp)];
-    for (int i=1;i<=lpx_get_num_rows(lp);++i){
-      len=lpx_get_mat_row(lp,i,ind,val);
-      lpx_set_mat_row(newlp->lp, i,len,ind,val);
-      lpx_set_row_bnds(newlp->lp,i,lpx_get_row_type(lp,i),
-		       lpx_get_row_lb(lp,i),lpx_get_row_ub(lp,i));
-    }
-
-    //Objective function, coloumn bounds
-    lpx_set_obj_dir(newlp->lp, lpx_get_obj_dir(lp));
-    //Objectif function's constant term treated separately
-    lpx_set_obj_coef(newlp->lp,0,lpx_get_obj_coef(lp,0));
-    for (int i=1;i<=lpx_get_num_cols(lp);++i){
-      lpx_set_obj_coef(newlp->lp,i,lpx_get_obj_coef(lp,i));
-      lpx_set_col_bnds(newlp->lp,i,lpx_get_col_type(lp,i),
-		       lpx_get_col_lb(lp,i),lpx_get_col_ub(lp,i));
-      
-      
-    }
-
+    LpGlpk* newlp=new LpGlpk(*this);
     return *newlp;
   }
 

Modified: hugo/trunk/lemon/lp_glpk.h
==============================================================================
--- hugo/trunk/lemon/lp_glpk.h	(original)
+++ hugo/trunk/lemon/lp_glpk.h	Mon Dec  4 14:13:14 2006
@@ -44,6 +44,7 @@
     typedef LpSolverBase Parent;
     
     LpGlpk();
+    LpGlpk(const LpGlpk &);
     ~LpGlpk();
     
   protected:
@@ -108,7 +109,8 @@
     ///
     ///The presolver is off by default.
     void presolver(bool b);
-    
+
+    LPX *lpx() {return lp;}
   };
 } //END OF NAMESPACE LEMON
 



More information about the Lemon-commits mailing list