Date: Monday, January 30, 2006 @ 11:48:26
Author: marc
Path: /cvsroot/carob/carob/src
Modified: ParameterStatement.cpp (1.15 -> 1.16)
templatized floating-point s.precision() instead of duplicating code
------------------------+
ParameterStatement.cpp | 51 +++++++++++++++++++++++------------------------
1 files changed, 25 insertions(+), 26 deletions(-)
Index: carob/src/ParameterStatement.cpp
diff -u carob/src/ParameterStatement.cpp:1.15
carob/src/ParameterStatement.cpp:1.16
--- carob/src/ParameterStatement.cpp:1.15 Fri Jan 27 19:03:19 2006
+++ carob/src/ParameterStatement.cpp Mon Jan 30 11:48:26 2006
@@ -213,39 +213,30 @@
// See paragraph "Conversions" at:
// http://www2.hursley.ibm.com/decimal/ for more details and proofs.
-template<class Ch> void
-streamSettingsForFloatingPoint(basic_ostream<Ch>& s)
-{
- s.imbue(locC);
- s.setf(std::ios_base::scientific, std::ios_base::floatfield);
-}
-
-// template specialization for float
-template<class Ch>
-class streamSettings<float, Ch>
+template<int precision, class Ch>
+class FPSettings
{
public:
void doManip(basic_ostream<Ch>& s) const
{
- streamSettingsForFloatingPoint(s);
- s.precision(9);
- };
+ s.imbue(locC);
+ s.setf(std::ios_base::scientific, std::ios_base::floatfield);
+ s.precision(precision);
+ }
};
-// template specialization for double
+// settings specialization for double
template<class Ch>
-class streamSettings<double, Ch>
-{
-public:
- void doManip(basic_ostream<Ch>& s) const
- {
- streamSettingsForFloatingPoint(s);
- s.precision(17);
- };
-};
+class streamSettings<double, Ch> : public FPSettings<17, Ch> { };
+
+// settings specialization for float
+template<class Ch>
+class streamSettings<float, Ch> : public FPSettings<9, Ch> { };
-template<class FP>
+
+
+template<typename FP>
class FPoneShotFilter
{
basic_ostream<wchar_t>& wrapped_stream;
@@ -280,6 +271,7 @@
}
};
+// filter specialization for double
template<>
class oneShotFilter<double, wchar_t> : public FPoneShotFilter<double>
{
@@ -287,6 +279,7 @@
oneShotFilter(basic_ostream<wchar_t>& s) : FPoneShotFilter<double>(s) { } ;
};
+// filter specialization for float
template<>
class oneShotFilter<float, wchar_t> : public FPoneShotFilter<float>
{
@@ -345,8 +338,6 @@
// - carefully checking that streamSettings<T1>() does not step on
streamSettings<T2>() toes
std::wostringstream buffer;
-
- // TODO: catch inf & NaN
buffer << START_PARAM_TAG << typeTag << streamSettings<T>() << value <<
END_PARAM_TAG;
inStrings[paramIndex-1] = buffer.str();
@@ -439,3 +430,11 @@
{
set<wstring>(parameterIndex, STRING_TAG, x);
}
+
+/*
+ * Local Variables:
+ * c-file-style: "bsd"
+ * c-basic-offset: 2
+ * indent-tabs-mode: nil
+ * End:
+ */
_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits