outsourced some functionality
[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
10 #include <unistd.h>
11
12 #include "lpp_cplex.h"
13 #include "lpp_solvers.h"
14
15 static void dummy_solver(lpp_t *lpp)
16 {
17   int i;
18
19   for(i = 0; i < lpp->var_next; ++i) {
20     lpp->vars[i]->value = i;
21     lpp->vars[i]->value_kind = lpp_value_solution;
22   }
23
24   if(lpp->log)
25           fprintf(lpp->log, "dummy solver exiting now.\n");
26
27   sleep(1);
28   lpp->sol_time = 0.0;
29   lpp->iterations = 0;
30   lpp->sol_state = lpp_optimal;
31 }
32
33 static void segv_solver(lpp_t *lpp)
34 {
35   int i;
36
37   for(i = 0; i < lpp->var_next; ++i) {
38     lpp->vars[i]->value = i;
39     lpp->vars[i]->value_kind = lpp_value_solution;
40   }
41
42   if(lpp->log)
43           fprintf(lpp->log, "segv dummy solver exiting now.\n");
44
45   sleep(1);
46   *((int *) 0) = 1;
47 }
48
49 lpp_solver_t lpp_solvers[] = {
50   { lpp_solve_cplex,   "cplex",   1 },
51   { dummy_solver,      "dummy",   2 },
52   { segv_solver,       "segv",    2 },
53   { NULL,              NULL,      0 }
54 };
55
56 lpp_solver_func_t *lpp_find_solver(const char *name)
57 {
58   int i;
59
60   for(i = 0; lpp_solvers[i].solver != NULL; i++)
61     if(strcmp(lpp_solvers[i].name, name) == 0)
62       return lpp_solvers[i].solver;
63
64   return NULL;
65 }
66
67