Adding Simulated Annealing Tuner ...
[satune.git] / src / Tuner / serializetuner.cc
1 #include "serializetuner.h"
2 #include <iostream>
3 #include <fstream>
4 using namespace std;
5
6 SerializeTuner::SerializeTuner(const char *filename) {
7         ifstream myfile;
8         myfile.open (filename, ios::in);
9         if (myfile.is_open()) {
10                 bool hasVar;
11                 VarType type1;
12                 VarType type2;
13                 TunableParam param;
14                 int lowValue;
15                 int highValue;
16                 int defaultValue;
17                 int selectedValue;
18                 while (myfile >> hasVar >> type1 >> type2 >> param >> lowValue >> highValue >> defaultValue >> selectedValue) {
19                         TunableSetting *setting;
20
21                         if (hasVar) {
22                                 setting = new TunableSetting(type1, type2, param);
23                         } else {
24                                 setting = new TunableSetting(param);
25                         }
26                         setting->setDecision(lowValue, highValue, defaultValue, selectedValue);
27                         settings.add(setting);
28                         usedSettings.add(setting);
29                 }
30                 myfile.close();
31         } else {
32                 model_print("Warning: Tuner %s couldn't be loaded ... Using default tuner instead ....\n", filename);
33         }
34 }
35
36 /*SearchTuner::~SearchTuner() {
37    SetIteratorTunableSetting *iterator = settings.iterator();
38    while (iterator->hasNext()) {
39     TunableSetting *setting = iterator->next();
40     delete setting;
41    }
42    delete iterator;
43    }*/
44
45
46 int SerializeTuner::getTunable(TunableParam param, TunableDesc *descriptor) {
47         TunableSetting setting(param);
48         TunableSetting *result = usedSettings.get(&setting);
49         if (result == NULL) {
50                 result = settings.get(&setting);
51                 if ( result == NULL) {
52                         return descriptor->defaultValue;
53                 }
54                 usedSettings.add(result);
55         }
56         return result->selectedValue;
57 }
58
59 int SerializeTuner::getVarTunable(VarType vartype1, VarType vartype2, TunableParam param, TunableDesc *descriptor) {
60         TunableSetting setting(vartype1, vartype2, param);
61         TunableSetting *result = usedSettings.get(&setting);
62         if (result == NULL) {
63                 result = settings.get(&setting);
64                 if ( result == NULL) {
65                         return descriptor->defaultValue;
66                 }
67                 usedSettings.add(result);
68         }
69         return result->selectedValue;
70 }