Bug fix ...
[satune.git] / src / Tuner / searchtuner.h
index c136dc12359a215cf46dbb214e6503c0f638e40b..935f5277db5f6c3b56fa532410ca4b92af611b6d 100644 (file)
@@ -3,16 +3,23 @@
 #include "classlist.h"
 #include "tunable.h"
 #include "structs.h"
+#include <ostream>
+using namespace std;
 
 class TunableSetting {
- public:
-       TunableSetting(VarType type, TunableParam param);       
+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);
-       MEMALLOC;
- private:
+       void print();
+       friend std ::ostream &operator<< (std::ostream &stream, const TunableSetting &matrix);
+       CMEMALLOC;
+private:
        bool hasVar;
-       VarType type;
+       VarType type1;
+       VarType type2;
        TunableParam param;
        int lowValue;
        int highValue;
@@ -21,24 +28,38 @@ class TunableSetting {
        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<TunableSetting *, uintptr_t, 4, tunableSettingHash, tunableSettingEquals> HashSetTunableSetting;
-typedef HSIterator<TunableSetting *, uintptr_t, 4, tunableSettingHash, tunableSettingEquals> HSIteratorTunableSetting;
-
 class SearchTuner : public Tuner {
- public:
+public:
        SearchTuner();
+       SearchTuner(const char *filename, bool addused = false);
        ~SearchTuner();
-       int getTunable(TunableParam param, TunableDesc *descriptor);
+       virtual int getTunable(TunableParam param, TunableDesc *descriptor);
        int getVarTunable(VarType vartype, TunableParam param, TunableDesc *descriptor);
-       MEMALLOC;
- private:
-       HashSetTunableSetting usedSettings;
-       HashSetTunableSetting settings;
+       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();
+        bool isSubTunerof(SearchTuner *newTuner);
+       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);
+        bool equalUsed(SearchTuner *tuner);
+       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