diff options
author | Steve Reinhardt <stever@eecs.umich.edu> | 2003-10-28 17:48:10 -0800 |
---|---|---|
committer | Steve Reinhardt <stever@eecs.umich.edu> | 2003-10-28 17:48:10 -0800 |
commit | 3761bcf076e9289f34b4863d87e4b2afdd276341 (patch) | |
tree | fc9944fb1e928313a80b0f5738536f848d8c9de3 /sim/param.cc | |
parent | e12e64a0718f6805c1203e1d11a39abaf0d9483b (diff) | |
download | gem5-3761bcf076e9289f34b4863d87e4b2afdd276341.tar.xz |
Get new serialization code to link.
sim/param.cc:
Convert parseParam() and showParam() to templates,
andd explicitly instantiate them for common types.
sim/param.hh:
Add declarations for parseParam() and showParam() function templates,
so serialize.cc can use them.
sim/serialize.cc:
Don't need declarations for parseParam() and showParam() since
we put them in param.hh.
Also instantiate paramOut() etc. for bool.
--HG--
extra : convert_revision : 1d84d0fbec64481996cbfa8b84c67c13c6244385
Diffstat (limited to 'sim/param.cc')
-rw-r--r-- | sim/param.cc | 57 |
1 files changed, 21 insertions, 36 deletions
diff --git a/sim/param.cc b/sim/param.cc index 8284983a8..1ae11fdd2 100644 --- a/sim/param.cc +++ b/sim/param.cc @@ -88,53 +88,41 @@ BaseParam::die(const string &err) const // Integer types all use to_number for parsing and '<<' for // displaying // -#define INT_PARAM(type) \ -bool \ -parseParam(const string &s, type &value) \ -{ \ - return to_number(s, value); \ -} \ - \ -void \ -showParam(ostream &os, type value) \ -{ \ - os << value; \ -} - -INT_PARAM(unsigned long long) -INT_PARAM(signed long long) -INT_PARAM(unsigned long) -INT_PARAM(signed long) -INT_PARAM(unsigned int) -INT_PARAM(signed int) -INT_PARAM(unsigned short) -INT_PARAM(signed short) -INT_PARAM(unsigned char) -INT_PARAM(signed char) - -#undef INT_PARAM +template <class T> +bool +parseParam(const string &s, T &value) +{ + return to_number(s, value); +} + +template <class T> +void +showParam(ostream &os, const T &value) +{ + os << value; +} // // Floating-point types // +template <> bool parseParam(const string &s, float &value) { return (sscanf(s.c_str(), "%f", &value) == 1); } +template <> bool parseParam(const string &s, double &value) { return (sscanf(s.c_str(), "%lf", &value) == 1); } -void showParam(ostream &os, float value) { os << value; } -void showParam(ostream &os, double value) { os << value; } - // // bool // +template <> bool parseParam(const string &s, bool &value) { @@ -154,8 +142,9 @@ parseParam(const string &s, bool &value) } +template <> void -showParam(ostream &os, bool value) +showParam(ostream &os, const bool &value) { os << (value ? "true" : "false"); } @@ -164,6 +153,7 @@ showParam(ostream &os, bool value) // // string // +template <> bool parseParam(const string &s, string &value) { @@ -171,13 +161,6 @@ parseParam(const string &s, string &value) return true; } - -void -showParam(ostream &os, const string &value) -{ - os << value; -} - // // End of parseParam/showParam definitions. Now we move on to // incorporate them into the Param/VectorParam parse() and showValue() @@ -274,6 +257,8 @@ template VectorParam<type>; // instantiate all four methods (parse/show, scalar/vector) for basic // types that can use the above templates #define INSTANTIATE_PARAM_TEMPLATES(type, typestr) \ +template bool parseParam<type>(const string &s, type &value); \ +template void showParam<type>(ostream &os, const type &value); \ template void Param<type>::parse(const string &); \ template void VectorParam<type>::parse(const string &); \ template void Param<type>::showValue(ostream &) const; \ |