BUG FIX when there is no usedSettings
[satune.git] / src / Tuner / searchtuner.cc
index b010cd52f1a01b3beab888a3eea3e2312f21d182..3cf94fb1f937f880c0dbb08c23d869d1e799bc49 100644 (file)
@@ -52,16 +52,6 @@ void TunableSetting::print() {
        model_print("\n");
 }
 
-unsigned int tunableSettingHash(TunableSetting *setting) {
-       return setting->hasVar ^ setting->type1 ^ setting->type2 ^ setting->param;
-}
-
-bool tunableSettingEquals(TunableSetting *setting1, TunableSetting *setting2) {
-       return setting1->hasVar == setting2->hasVar &&
-                                setting1->type1 == setting2->type1 &&
-                                setting1->type2 == setting2->type2 &&
-                                setting1->param == setting2->param;
-}
 
 ostream &operator<<(ostream &os, const TunableSetting &ts)
 {
@@ -74,7 +64,7 @@ ostream &operator<<(ostream &os, const TunableSetting &ts)
 SearchTuner::SearchTuner() {
 }
 
-SearchTuner::SearchTuner(const char *filename) {
+SearchTuner::SearchTuner(const char *filename, bool addused) {
        ifstream myfile;
        myfile.open (filename, ios::in);
        if (myfile.is_open()) {
@@ -96,14 +86,39 @@ SearchTuner::SearchTuner(const char *filename) {
                        }
                        setting->setDecision(lowValue, highValue, defaultValue, selectedValue);
                        settings.add(setting);
-                       usedSettings.add(setting);
+                       if (addused) {
+                               usedSettings.add(setting);
+                       }
                }
                myfile.close();
-       } else{
+       } else {
                model_print("Warning: Tuner %s couldn't be loaded ... Using default tuner instead ....\n", filename);
        }
 }
 
+bool SearchTuner::equalUsed(SearchTuner *tuner) {
+       if (tuner->usedSettings.getSize() != usedSettings.getSize()) {
+               return false;
+       }
+       bool result = true;
+       SetIteratorTunableSetting *iterator = usedSettings.iterator();
+       while (iterator->hasNext()) {
+               TunableSetting *setting = iterator->next();
+               if (!tuner->usedSettings.contains(setting)) {
+                       result = false;
+                       break;
+               } else {
+                       TunableSetting *tunerSetting = tuner->usedSettings.get(setting);
+                       if (tunerSetting->selectedValue != setting->selectedValue) {
+                               result = false;
+                               break;
+                       }
+               }
+       }
+       delete iterator;
+       return result;
+}
+
 void SearchTuner::addUsed(const char *filename) {
        ifstream myfile;
        myfile.open (filename, ios::in);
@@ -141,9 +156,27 @@ void SearchTuner::addUsed(const char *filename) {
        }
 }
 
+bool SearchTuner::isSubTunerof(SearchTuner *newTuner) {
+       SetIteratorTunableSetting *iterator = usedSettings.iterator();
+       while (iterator->hasNext()) {
+               TunableSetting *setting = iterator->next();
+               if (!newTuner->settings.contains(setting)) {
+                       return false;
+               } else {
+                       TunableSetting *newSetting = newTuner->settings.get(setting);
+                       if (newSetting->selectedValue != setting->selectedValue) {
+                               return false;
+                       }
+               }
+       }
+       delete iterator;
+       return true;
+}
+
 SearchTuner *SearchTuner::copyUsed() {
        SearchTuner *tuner = new SearchTuner();
-       SetIteratorTunableSetting *iterator = usedSettings.iterator();
+       
+       SetIteratorTunableSetting *iterator = !usedSettings.isEmpty()? usedSettings.iterator():settings.iterator();
        while (iterator->hasNext()) {
                TunableSetting *setting = iterator->next();
                TunableSetting *copy = new TunableSetting(setting);