further cleanup of lpp code
authorMatthias Braun <matze@braunis.de>
Mon, 20 Jun 2011 10:59:02 +0000 (12:59 +0200)
committerMatthias Braun <matze@braunis.de>
Mon, 20 Jun 2011 10:59:02 +0000 (12:59 +0200)
ir/lpp/lpp.c
ir/lpp/lpp_cmd.def [deleted file]
ir/lpp/lpp_comm.c
ir/lpp/lpp_comm.h
ir/lpp/lpp_cplex.c
ir/lpp/lpp_gurobi.c
ir/lpp/lpp_solvers.c
ir/lpp/sp_matrix.c

index 6f1f39d..82ea74c 100644 (file)
@@ -8,10 +8,6 @@
 
 #include "config.h"
 
-#ifdef HAVE_IO_H
-#include <io.h>
-#endif
-
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
diff --git a/ir/lpp/lpp_cmd.def b/ir/lpp/lpp_cmd.def
deleted file mode 100644 (file)
index 513f54c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-LPP_CMD(BAD)
-LPP_CMD(OK)
-LPP_CMD(PROBLEM)
-LPP_CMD(SOLUTION)
-LPP_CMD(SOLVER)
-LPP_CMD(BYE)
-LPP_CMD(SOLVERS)
-LPP_CMD(SET_DEBUG)
-LPP_CMD(INFO)
index d719c5d..21ce281 100644 (file)
@@ -400,9 +400,17 @@ void lpp_send_ack(lpp_comm_t *comm)
 const char *lpp_get_cmd_name(int cmd)
 {
        switch(cmd) {
-#define LPP_CMD(x) case LPP_CMD_ ## x: return #x;
-#include "lpp_cmd.def"
-#undef LPP_CMD
+       case LPP_CMD_BAD:       return "BAD";
+       case LPP_CMD_OK:        return "OK";
+       case LPP_CMD_PROBLEM:   return "PROBLEM";
+       case LPP_CMD_SOLUTION:  return "SOLUTION";
+       case LPP_CMD_SOLVER:    return "SOLVER";
+       case LPP_CMD_BYE:       return "BYE";
+       case LPP_CMD_SOLVERS:   return "SOLVERS";
+       case LPP_CMD_SET_DEBUG: return "SET_DEBUG";
+       case LPP_CMD_INFO:      return "INFO";
+       case LPP_CMD_LAST:
+               break;
        }
 
        return "<unknown>";
index 870c031..4c425d7 100644 (file)
 #define LPP_BUFSIZE (1 << 20)
 
 enum {
-#define LPP_CMD(x) LPP_CMD_ ## x,
-#include "lpp_cmd.def"
-#undef LPP_CMD
+       LPP_CMD_BAD,
+       LPP_CMD_OK,
+       LPP_CMD_PROBLEM,
+       LPP_CMD_SOLUTION,
+       LPP_CMD_SOLVER,
+       LPP_CMD_BYE,
+       LPP_CMD_SOLVERS,
+       LPP_CMD_SET_DEBUG,
+       LPP_CMD_INFO,
        LPP_CMD_LAST
 };
 
index 969defe..544e5f8 100644 (file)
@@ -6,33 +6,22 @@
  */
 #include "config.h"
 
+#ifdef WITH_CPLEX
+
 #include "lpp_cplex.h"
 
 #include <stdio.h>
 #include <stdlib.h>
-
-#ifdef WITH_CPLEX
-
-#include "obst.h"
-
+#include <assert.h>
 #include <ilcplex/cplex.h>
 
-#include "assert.h"
+#include "obst.h"
+#include "stat_timing.h"
 #include "sp_matrix.h"
 
 static char cpx_cst_encoding[4] = "?ELG";
 static char cpx_var_encoding[4] = "??CB";
 
-#define my_timersub(tvp, uvp, vvp)                     \
-    do {                                \
-        (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;      \
-        (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec;   \
-        if ((vvp)->tv_usec < 0) {               \
-            (vvp)->tv_sec--;                \
-            (vvp)->tv_usec += 1000000;          \
-        }                           \
-    } while (0)
-
 typedef struct _cpx_t {
        lpp_t *lpp;
        CPXENVptr env;
@@ -171,7 +160,8 @@ static void cpx_solve(cpx_t *cpx)
 {
        int i, CPX_state, numcols;
        double *values;
-       struct timeval tvb, tva, tvdiff;
+       timing_ticks_t tvb;
+       timing_ticks_t tva;
 
        lpp_t *lpp = cpx->lpp;
        numcols = CPXgetnumcols(cpx->env, cpx->prob);
@@ -214,9 +204,9 @@ static void cpx_solve(cpx_t *cpx)
        // CPXsetintparam (cpx->env, CPX_PARAM_SCRIND, CPX_ON);
 
        /* solve */
-       gettimeofday(&tvb, NULL);
+       timing_ticks(&tvb);
        cpx->status = CPXmipopt(cpx->env, cpx->prob);
-       gettimeofday(&tva, NULL);
+       timing_ticks(&tva);
        chk_cpx_err(cpx);
 
        /* get solution status */
@@ -258,8 +248,8 @@ static void cpx_solve(cpx_t *cpx)
        CPXgetbestobjval(cpx->env, cpx->prob, &lpp->best_bound);
 
        /* get some statistics */
-       my_timersub(&tva, &tvb, &tvdiff);
-       lpp->sol_time = tvdiff.tv_sec + tvdiff.tv_usec / 1e6;
+       timing_ticks_sub(tva, tvb);
+       lpp->sol_time = timing_ticks_dbl(tva);
        lpp->iterations = CPXgetmipitcnt(cpx->env, cpx->prob);
 }
 
index ce20157..7ec41a0 100644 (file)
@@ -5,13 +5,12 @@
  */
 #include "config.h"
 
+#ifdef WITH_GUROBI
 #include "lpp_gurobi.h"
 
 #include <stdio.h>
 #include <stdlib.h>
 
-#ifdef WITH_GUROBI
-
 #include "obst.h"
 
 #include <gurobi_c.h>
 static char gurobi_cst_encoding[4] = { 0, GRB_EQUAL, GRB_LESS_EQUAL, GRB_GREATER_EQUAL };
 static char gurobi_var_encoding[4] = { 0, 0, GRB_CONTINUOUS, GRB_BINARY };
 
-#define my_timersub(tvp, uvp, vvp)                     \
-    do {                                \
-        (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;      \
-        (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec;   \
-        if ((vvp)->tv_usec < 0) {               \
-            (vvp)->tv_sec--;                \
-            (vvp)->tv_usec += 1000000;          \
-        }                           \
-    } while (0)
-
 typedef struct _gurobi_t {
        lpp_t *lpp;
        GRBenv *env;
index ec61b19..1feb44b 100644 (file)
@@ -8,46 +8,10 @@
  */
 #include "config.h"
 
-#include <unistd.h>
-
 #include "lpp_cplex.h"
 #include "lpp_solvers.h"
 #include "lpp_gurobi.h"
 
-static void dummy_solver(lpp_t *lpp)
-{
-       int i;
-
-       for(i = 0; i < lpp->var_next; ++i) {
-               lpp->vars[i]->value = i;
-               lpp->vars[i]->value_kind = lpp_value_solution;
-       }
-
-       if(lpp->log)
-               fprintf(lpp->log, "dummy solver exiting now.\n");
-
-       sleep(1);
-       lpp->sol_time = 0.0;
-       lpp->iterations = 0;
-       lpp->sol_state = lpp_optimal;
-}
-
-static void segv_solver(lpp_t *lpp)
-{
-       int i;
-
-       for(i = 0; i < lpp->var_next; ++i) {
-               lpp->vars[i]->value = i;
-               lpp->vars[i]->value_kind = lpp_value_solution;
-       }
-
-       if(lpp->log)
-               fprintf(lpp->log, "segv dummy solver exiting now.\n");
-
-       sleep(1);
-       *((int *) 0) = 1;
-}
-
 lpp_solver_t lpp_solvers[] = {
 #ifdef WITH_CPLEX
        { lpp_solve_cplex,   "cplex",   1 },
@@ -55,8 +19,6 @@ lpp_solver_t lpp_solvers[] = {
 #ifdef WITH_GUROBI
        { lpp_solve_gurobi,  "gurobi",  1 },
 #endif
-       { dummy_solver,      "dummy",   2 },
-       { segv_solver,       "segv",    2 },
        { NULL,              NULL,      0 }
 };
 
index 1059c0a..7a598a1 100644 (file)
  * Complexity is O(1) then.
  * Random access or right-to-left and bottom-to-top is O(m*n).
  */
-
-#ifdef _WIN32
-#include <malloc.h>
-#endif
-#ifdef HAVE_ALLOCA_H
-#include <alloca.h>
-#endif
+#include "config.h"
 
 #include <stdio.h>
 #include <stdlib.h>