fix up serialization a bit more
authorbdemsky <bdemsky@uci.edu>
Tue, 16 Oct 2018 00:04:31 +0000 (17:04 -0700)
committerbdemsky <bdemsky@uci.edu>
Tue, 16 Oct 2018 00:04:31 +0000 (17:04 -0700)
src/Test/deserializerun.cc
src/Tuner/searchtuner.cc
src/Tuner/searchtuner.h

index ef6e9db5084414a8fd7910282a13b2a6263b26f2..d2c591a50b8e222b79964a4dffe54f4d18ea949c 100644 (file)
@@ -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;
index e594abef11a07062625b8adf9925338600749690..f4f4cfcd00c2912179958c4827fab126e8cf8be3 100644 (file)
@@ -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()) {
index 44dcd5c64d6fe2ffce91a2fcdbaa628013f63cea..2cd3118bda41514bf9939d94a86fbd85f8175c38 100644 (file)
@@ -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: