From: bdemsky Date: Tue, 16 Oct 2018 00:04:31 +0000 (-0700) Subject: fix up serialization a bit more X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=4b6c69fed4ff60a6652b3f9fd156beb78c57cec0;p=satune.git fix up serialization a bit more --- diff --git a/src/Test/deserializerun.cc b/src/Test/deserializerun.cc index ef6e9db..d2c591a 100644 --- a/src/Test/deserializerun.cc +++ b/src/Test/deserializerun.cc @@ -25,7 +25,7 @@ int main(int argc, char **argv) { myfile.close(); //serialize out the tuner we used snprintf(buffer, sizeof(buffer), "%sused", argv[3]); - tuner->serialize(buffer); + tuner->serializeUsed(buffer); delete solver; return 0; diff --git a/src/Tuner/searchtuner.cc b/src/Tuner/searchtuner.cc index e594abe..f4f4cfc 100644 --- a/src/Tuner/searchtuner.cc +++ b/src/Tuner/searchtuner.cc @@ -95,12 +95,50 @@ SearchTuner::SearchTuner(const char *filename) { setting = new TunableSetting(param); } setting->setDecision(lowValue, highValue, defaultValue, selectedValue); + settings.add(setting); usedSettings.add(setting); } myfile.close(); } } +void SearchTuner::addUsed(const char *filename) { + ifstream myfile; + myfile.open (filename, ios::in); + if (myfile.is_open()) { + bool hasVar; + VarType type1; + VarType type2; + TunableParam param; + int lowValue; + int highValue; + int defaultValue; + int selectedValue; + while (myfile >> hasVar >> type1 >> type2 >> param >> lowValue >> highValue >> defaultValue >> selectedValue) { + TunableSetting *setting; + + if (hasVar) { + setting = new TunableSetting(type1, type2, param); + } else { + setting = new TunableSetting(param); + } + setting->setDecision(lowValue, highValue, defaultValue, selectedValue); + if (!settings.contains(setting)) { + settings.add(setting); + usedSettings.add(setting); + } else { + TunableSetting *tmp = settings.get(setting); + settings.remove(tmp); + usedSettings.remove(tmp); + delete tmp; + settings.add(setting); + usedSettings.add(setting); + } + } + myfile.close(); + } +} + SearchTuner *SearchTuner::copyUsed() { SearchTuner *tuner = new SearchTuner(); SetIteratorTunableSetting *iterator = usedSettings.iterator(); @@ -212,6 +250,18 @@ void SearchTuner::serialize(const char *filename) { delete iterator; } +void SearchTuner::serializeUsed(const char *filename) { + ofstream myfile; + myfile.open (filename, ios::out | ios::trunc); + SetIteratorTunableSetting *iterator = usedSettings.iterator(); + while (iterator->hasNext()) { + TunableSetting *setting = iterator->next(); + myfile << *setting << endl; + } + myfile.close(); + delete iterator; +} + void SearchTuner::printUsed() { SetIteratorTunableSetting *iterator = usedSettings.iterator(); while (iterator->hasNext()) { diff --git a/src/Tuner/searchtuner.h b/src/Tuner/searchtuner.h index 44dcd5c..2cd3118 100644 --- a/src/Tuner/searchtuner.h +++ b/src/Tuner/searchtuner.h @@ -54,6 +54,8 @@ public: void print(); void printUsed(); void serialize(const char *file); + void serializeUsed(const char *file); + void addUsed(const char *file); CMEMALLOC; protected: