lpp: adapt to firm coding conventions, warning fixes, cleanup
[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 }