Add binary
[satune.git] / src / Tuner / searchtuner.h
1 #ifndef SEARCHTUNER_H
2 #define SEARCHTUNER_H
3 #include "classlist.h"
4 #include "tunable.h"
5 #include "structs.h"
6 #include <ostream>
7 using namespace std;
8 #define TUNEFILE "tune.conf"
9
10 class TunableSetting {
11 public:
12         TunableSetting(VarType type, TunableParam param);
13         TunableSetting(VarType type1, VarType type2, TunableParam param);
14         TunableSetting(TunableParam param);
15         TunableSetting(TunableSetting *ts);
16         void setDecision(int _low, int _high, int _default, int _selection);
17         void print();
18         friend std ::ostream &operator<< (std::ostream &stream, const TunableSetting &matrix);
19         CMEMALLOC;
20 private:
21         bool hasVar;
22         VarType type1;
23         VarType type2;
24         TunableParam param;
25         int lowValue;
26         int highValue;
27         int defaultValue;
28         int selectedValue;
29         friend unsigned int tunableSettingHash(TunableSetting *setting);
30         friend bool tunableSettingEquals(TunableSetting *setting1, TunableSetting *setting2);
31         friend class SearchTuner;
32         friend class StaticSearchTuner;
33 };
34
35 unsigned int tunableSettingHash(TunableSetting *setting);
36 bool tunableSettingEquals(TunableSetting *setting1, TunableSetting *setting2);
37
38 typedef Hashset<TunableSetting *, uintptr_t, 4, tunableSettingHash, tunableSettingEquals> HashsetTunableSetting;
39 typedef SetIterator<TunableSetting *, uintptr_t, 4, tunableSettingHash, tunableSettingEquals> SetIteratorTunableSetting;
40
41 class SearchTuner : public Tuner {
42 public:
43         SearchTuner();
44         ~SearchTuner();
45         int getTunable(TunableParam param, TunableDesc *descriptor);
46         int getVarTunable(VarType vartype, TunableParam param, TunableDesc *descriptor);
47         int getVarTunable(VarType vartype1, VarType vartype2, TunableParam param, TunableDesc *descriptor);
48         SearchTuner *copyUsed();
49         void randomMutate();
50         uint getSize() { return usedSettings.getSize();}
51         void print();
52         void printUsed();
53         void serialize();
54
55         CMEMALLOC;
56 protected:
57         /** Used Settings keeps track of settings that were actually used by
58            the example. Mutating settings may cause the Constraint Compiler
59            not to query other settings.*/
60         HashsetTunableSetting usedSettings;
61         /** Settings contains all settings. */
62         HashsetTunableSetting settings;
63 };
64
65 #endif