Provide do_put methods for inserting all remaining basic type values

into wide streams on systems where sizeof(wchar_t) == 2.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@16275 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Enrico Forestieri 2006-12-15 00:30:46 +00:00
parent 655890d04d
commit e7a9321e43

View File

@ -439,53 +439,66 @@ public:
}; };
protected: protected:
iter_type
do_put(iter_type oit, std::ios_base & b, char_type fill, bool v) const
{
return do_put_helper(oit, b, fill, v);
}
iter_type iter_type
do_put(iter_type oit, std::ios_base & b, char_type fill, long v) const do_put(iter_type oit, std::ios_base & b, char_type fill, long v) const
{ {
if (fill >= 0x80) return do_put_helper(oit, b, fill, v);
throw num_put_failure();
std::string s;
// 64 is large enough
s.resize(64);
string_num_put_facet f;
std::string::const_iterator cit = s.begin();
std::string::const_iterator end =
f.put(s.begin(), b, fill, v);
for (; cit != end; ++cit, ++oit)
*oit = *cit;
return oit;
} }
iter_type iter_type
do_put(iter_type oit, std::ios_base & b, char_type fill, unsigned long v) const do_put(iter_type oit, std::ios_base & b, char_type fill, unsigned long v) const
{ {
if (fill >= 0x80) return do_put_helper(oit, b, fill, v);
throw num_put_failure();
std::string s;
// 64 is large enough
s.resize(64);
string_num_put_facet f;
std::string::const_iterator cit = s.begin();
std::string::const_iterator end =
f.put(s.begin(), b, fill, v);
for (; cit != end; ++cit, ++oit)
*oit = *cit;
return oit;
} }
#ifdef _GLIBCXX_USE_LONG_LONG
iter_type
do_put(iter_type oit, std::ios_base & b, char_type fill, long long v) const
{
return do_put_helper(oit, b, fill, v);
}
iter_type
do_put(iter_type oit, std::ios_base & b, char_type fill, unsigned long long v) const
{
return do_put_helper(oit, b, fill, v);
}
#endif
iter_type iter_type
do_put(iter_type oit, std::ios_base & b, char_type fill, double v) const do_put(iter_type oit, std::ios_base & b, char_type fill, double v) const
{
return do_put_helper(oit, b, fill, v);
}
iter_type
do_put(iter_type oit, std::ios_base & b, char_type fill, long double v) const
{
return do_put_helper(oit, b, fill, v);
}
iter_type
do_put(iter_type oit, std::ios_base & b, char_type fill, void const * v) const
{
return do_put_helper(oit, b, fill, v);
}
private:
template <typename ValueType>
iter_type
do_put_helper(iter_type oit, std::ios_base & b, char_type fill, ValueType v) const
{ {
if (fill >= 0x80) if (fill >= 0x80)
throw num_put_failure(); throw num_put_failure();
std::string s;
// 64 is large enough // 64 is large enough
s.resize(64); std::string s(64, '\0');
string_num_put_facet f; string_num_put_facet f;
std::string::const_iterator cit = s.begin(); std::string::const_iterator cit = s.begin();
std::string::const_iterator end = std::string::const_iterator end =