X-Git-Url: http://plrg.eecs.uci.edu/git/?p=satune.git;a=blobdiff_plain;f=src%2FTuner%2Fsearchtuner.h;h=3db0064d099c3d1290d42f43a53cc96e6d32ce91;hp=2d0facd7b10177a6e67a8ce596d2ae601de4af02;hb=a76d4453326c0199b33a0a4f21c6e92b600ebfea;hpb=e8b4b2a66e33fea87702ac043ed4b9f791a7db8c diff --git a/src/Tuner/searchtuner.h b/src/Tuner/searchtuner.h index 2d0facd..3db0064 100644 --- a/src/Tuner/searchtuner.h +++ b/src/Tuner/searchtuner.h @@ -2,36 +2,69 @@ #define SEARCHTUNER_H #include "classlist.h" #include "tunable.h" +#include "structs.h" +#include +using namespace std; -class SearchTuner : public Tuner { - public: - SearchTuner(); - int getTunable(TunableParam param, TunableDesc *descriptor); - int getVarTunable(VarType vartype, TunableParam param, TunableDesc *descriptor); - MEMALLOC; - private: -}; - -class TunableParameter { - public: - TunableParameter(VarType type, TunableParam param); - TunableParameter(TunableParam param); - MEMALLOC; - private: +class TunableSetting { +public: + TunableSetting(VarType type, TunableParam param); + TunableSetting(VarType type1, VarType type2, TunableParam param); + TunableSetting(TunableParam param); + TunableSetting(TunableSetting *ts); + void setDecision(int _low, int _high, int _default, int _selection); + void print(); + friend std ::ostream &operator<< (std::ostream &stream, const TunableSetting &matrix); + CMEMALLOC; +private: bool hasVar; - VarType type; + VarType type1; + VarType type2; TunableParam param; -}; - -class TunableDecision { - public: - TunableDecision(int _low, int _high, int _default, int _selection); - MEMALLOC; - private: int lowValue; int highValue; int defaultValue; int selectedValue; + friend unsigned int tunableSettingHash(TunableSetting *setting); + friend bool tunableSettingEquals(TunableSetting *setting1, TunableSetting *setting2); + friend class SearchTuner; + friend class SerializeTuner; +}; + +unsigned int tunableSettingHash(TunableSetting *setting); +bool tunableSettingEquals(TunableSetting *setting1, TunableSetting *setting2); + +typedef Hashset HashsetTunableSetting; +typedef SetIterator SetIteratorTunableSetting; + +class SearchTuner : public Tuner { +public: + SearchTuner(); + SearchTuner(const char *filename); + ~SearchTuner(); + virtual int getTunable(TunableParam param, TunableDesc *descriptor); + int getVarTunable(VarType vartype, TunableParam param, TunableDesc *descriptor); + virtual int getVarTunable(VarType vartype1, VarType vartype2, TunableParam param, TunableDesc *descriptor); + void setTunable(TunableParam param, TunableDesc *descriptor, uint value); + void setVarTunable(VarType vartype, TunableParam param, TunableDesc *descriptor, uint value); + void setVarTunable(VarType vartype1, VarType vartype2, TunableParam param, TunableDesc *descriptor, uint value); + SearchTuner *copyUsed(); + void randomMutate(); + uint getSize() { return usedSettings.getSize();} + void print(); + void printUsed(); + void serialize(const char *file); + void serializeUsed(const char *file); + void addUsed(const char *file); + + CMEMALLOC; +protected: + /** Used Settings keeps track of settings that were actually used by + the example. Mutating settings may cause the Constraint Compiler + not to query other settings.*/ + HashsetTunableSetting usedSettings; + /** Settings contains all settings. */ + HashsetTunableSetting settings; }; #endif