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)
{
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()) {
}
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);
}
}
+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);