57c525b387d06cb11a1c34881dba8828867d66ec
[libfirm] / ir / lpp / lpp_solvers.c
1 /**
2  * @file   lpp_solvers.c
3  * @date   16.06.2011
4  * @author Sebastian Hack
5  *
6  * Copyright (C) 2011 Saarland University
7  * Released under the LGPL
8  */
9 #include "config.h"
10
11 #include <unistd.h>
12
13 #include "lpp_cplex.h"
14 #include "lpp_solvers.h"
15 #include "lpp_gurobi.h"
16
17 static void dummy_solver(lpp_t *lpp)
18 {
19   int i;
20
21   for(i = 0; i < lpp->var_next; ++i) {
22     lpp->vars[i]->value = i;
23     lpp->vars[i]->value_kind = lpp_value_solution;
24   }
25
26   if(lpp->log)
27           fprintf(lpp->log, "dummy solver exiting now.\n");
28
29   sleep(1);
30   lpp->sol_time = 0.0;
31   lpp->iterations = 0;
32   lpp->sol_state = lpp_optimal;
33 }
34
35 static void segv_solver(lpp_t *lpp)
36 {
37   int i;
38
39   for(i = 0; i < lpp->var_next; ++i) {
40     lpp->vars[i]->value = i;
41     lpp->vars[i]->value_kind = lpp_value_solution;
42   }
43
44   if(lpp->log)
45           fprintf(lpp->log, "segv dummy solver exiting now.\n");
46
47   sleep(1);
48   *((int *) 0) = 1;
49 }
50
51 lpp_solver_t lpp_solvers[] = {
52 #ifdef WITH_CPLEX
53   { lpp_solve_cplex,   "cplex",   1 },
54 #endif
55 #ifdef WITH_GUROBI
56   { lpp_solve_gurobi,  "gurobi",  1 },
57 #endif
58   { dummy_solver,      "dummy",   2 },
59   { segv_solver,       "segv",    2 },
60   { NULL,              NULL,      0 }
61 };
62
63 lpp_solver_func_t *lpp_find_solver(const char *name)
64 {
65   int i;
66
67   for(i = 0; lpp_solvers[i].solver != NULL; i++)
68     if(strcmp(lpp_solvers[i].name, name) == 0)
69       return lpp_solvers[i].solver;
70
71   return NULL;
72 }
73
74