sim: support checkpointing std::set<std::string>'s
This is in support of tag-based checkpoint versioning; the version tags are stored in string sets. This commit adds such support.
This commit is contained in:
parent
1ad5b77229
commit
62e0344aef
2 changed files with 62 additions and 0 deletions
|
@ -210,6 +210,24 @@ arrayParamOut(CheckpointOut &os, const string &name, const list<T> ¶m)
|
|||
os << "\n";
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void
|
||||
arrayParamOut(CheckpointOut &os, const string &name, const set<T> ¶m)
|
||||
{
|
||||
typename set<T>::const_iterator it = param.begin();
|
||||
|
||||
os << name << "=";
|
||||
if (param.size() > 0)
|
||||
showParam(os, *it);
|
||||
it++;
|
||||
while (it != param.end()) {
|
||||
os << " ";
|
||||
showParam(os, *it);
|
||||
it++;
|
||||
}
|
||||
os << "\n";
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void
|
||||
paramIn(CheckpointIn &cp, const string &name, T ¶m)
|
||||
|
@ -368,6 +386,36 @@ arrayParamIn(CheckpointIn &cp, const string &name, list<T> ¶m)
|
|||
}
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void
|
||||
arrayParamIn(CheckpointIn &cp, const string &name, set<T> ¶m)
|
||||
{
|
||||
const string §ion(Serializable::currentSection());
|
||||
string str;
|
||||
if (!cp.find(section, name, str)) {
|
||||
fatal("Can't unserialize '%s:%s'\n", section, name);
|
||||
}
|
||||
param.clear();
|
||||
|
||||
vector<string> tokens;
|
||||
tokenize(tokens, str, ' ');
|
||||
|
||||
for (vector<string>::size_type i = 0; i < tokens.size(); i++) {
|
||||
T scalar_value;
|
||||
if (!parseParam(tokens[i], scalar_value)) {
|
||||
string err("could not parse \"");
|
||||
|
||||
err += str;
|
||||
err += "\"";
|
||||
|
||||
fatal(err);
|
||||
}
|
||||
|
||||
// assign parsed value to vector
|
||||
param.insert(scalar_value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
objParamIn(CheckpointIn &cp, const string &name, SimObject * ¶m)
|
||||
|
@ -423,6 +471,11 @@ INSTANTIATE_PARAM_TEMPLATES(double)
|
|||
INSTANTIATE_PARAM_TEMPLATES(string)
|
||||
INSTANTIATE_PARAM_TEMPLATES(Pixel)
|
||||
|
||||
// set is only used with strings and furthermore doesn't agree with Pixel
|
||||
template void
|
||||
arrayParamOut(CheckpointOut &, const string &, const set<string> &);
|
||||
template void
|
||||
arrayParamIn(CheckpointIn &, const string &, set<string> &);
|
||||
|
||||
/////////////////////////////
|
||||
|
||||
|
|
|
@ -55,6 +55,7 @@
|
|||
#include <list>
|
||||
#include <map>
|
||||
#include <stack>
|
||||
#include <set>
|
||||
#include <vector>
|
||||
|
||||
#include "base/bitunion.hh"
|
||||
|
@ -123,6 +124,10 @@ template <class T>
|
|||
void arrayParamOut(CheckpointOut &cp, const std::string &name,
|
||||
const std::list<T> ¶m);
|
||||
|
||||
template <class T>
|
||||
void arrayParamOut(CheckpointOut &cp, const std::string &name,
|
||||
const std::set<T> ¶m);
|
||||
|
||||
template <class T>
|
||||
void arrayParamIn(CheckpointIn &cp, const std::string &name,
|
||||
T *param, unsigned size);
|
||||
|
@ -135,6 +140,10 @@ template <class T>
|
|||
void arrayParamIn(CheckpointIn &cp, const std::string &name,
|
||||
std::list<T> ¶m);
|
||||
|
||||
template <class T>
|
||||
void arrayParamIn(CheckpointIn &cp, const std::string &name,
|
||||
std::set<T> ¶m);
|
||||
|
||||
void
|
||||
objParamIn(CheckpointIn &cp, const std::string &name, SimObject * ¶m);
|
||||
|
||||
|
|
Loading…
Reference in a new issue