From 3761bcf076e9289f34b4863d87e4b2afdd276341 Mon Sep 17 00:00:00 2001 From: Steve Reinhardt Date: Tue, 28 Oct 2003 17:48:10 -0800 Subject: 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 --- sim/param.cc | 57 +++++++++++++++++++++------------------------------------ 1 file changed, 21 insertions(+), 36 deletions(-) (limited to 'sim/param.cc') 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 +bool +parseParam(const string &s, T &value) +{ + return to_number(s, value); +} + +template +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; // 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(const string &s, type &value); \ +template void showParam(ostream &os, const type &value); \ template void Param::parse(const string &); \ template void VectorParam::parse(const string &); \ template void Param::showValue(ostream &) const; \ -- cgit v1.2.3