diff options
Diffstat (limited to 'boost/tuple/tuple_io.hpp')
-rw-r--r-- | boost/tuple/tuple_io.hpp | 259 |
1 files changed, 0 insertions, 259 deletions
diff --git a/boost/tuple/tuple_io.hpp b/boost/tuple/tuple_io.hpp index c549716ebd..99cf36cb0d 100644 --- a/boost/tuple/tuple_io.hpp +++ b/boost/tuple/tuple_io.hpp @@ -13,21 +13,8 @@ #ifndef BOOST_TUPLE_IO_HPP #define BOOST_TUPLE_IO_HPP - -// add to boost/config.hpp -// for now -# if defined __GNUC__ -# if (__GNUC__ == 2 && __GNUC_MINOR__ <= 97) -#define BOOST_NO_TEMPLATED_STREAMS -#endif -#endif // __GNUC__ - -#if defined BOOST_NO_TEMPLATED_STREAMS -#include <iostream> -#else #include <istream> #include <ostream> -#endif #include <sstream> @@ -76,25 +63,6 @@ private: public: -#if defined (BOOST_NO_TEMPLATED_STREAMS) - static char get_manipulator(std::ios& i, manipulator_type m) { - char c = static_cast<char>(i.iword(get_stream_index(m))); - - // parentheses and space are the default manipulators - if (!c) { - switch(m) { - case detail::format_info::open : c = '('; break; - case detail::format_info::close : c = ')'; break; - case detail::format_info::delimiter : c = ' '; break; - } - } - return c; - } - - static void set_manipulator(std::ios& i, manipulator_type m, char c) { - i.iword(get_stream_index(m)) = static_cast<long>(c); - } -#else template<class CharType, class CharTrait> static CharType get_manipulator(std::basic_ios<CharType, CharTrait>& i, manipulator_type m) { @@ -124,7 +92,6 @@ public: // convertible long. i.iword(get_stream_index(m)) = static_cast<long>(c); } -#endif // BOOST_NO_TEMPLATED_STREAMS }; } // end of namespace detail @@ -138,39 +105,12 @@ public: const char c = 0) : mt(m), f_c(c) {} -#if defined (BOOST_NO_TEMPLATED_STREAMS) - void set(std::ios &io) const { - detail::format_info::set_manipulator(io, mt, f_c); - } -#else -#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) - template<class CharType2, class CharTrait> - void set(std::basic_ios<CharType2, CharTrait> &io) const { - detail::format_info::set_manipulator(io, mt, f_c); - } -#else template<class CharTrait> void set(std::basic_ios<CharType, CharTrait> &io) const { detail::format_info::set_manipulator(io, mt, f_c); } -#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION -#endif // BOOST_NO_TEMPLATED_STREAMS }; -#if defined (BOOST_NO_TEMPLATED_STREAMS) -inline std::ostream& -operator<<(std::ostream& o, const tuple_manipulator<char>& m) { - m.set(o); - return o; -} - -inline std::istream& -operator>>(std::istream& i, const tuple_manipulator<char>& m) { - m.set(i); - return i; -} - -#else template<class CharType, class CharTrait> inline std::basic_ostream<CharType, CharTrait>& @@ -186,7 +126,6 @@ operator>>(std::basic_istream<CharType, CharTrait>& i, const tuple_manipulator<C return i; } -#endif // BOOST_NO_TEMPLATED_STREAMS template<class CharType> inline tuple_manipulator<CharType> set_open(const CharType c) { @@ -217,62 +156,12 @@ namespace detail { // Note: The order of the print functions is critical // to let a conforming compiler find and select the correct one. -#if defined (BOOST_NO_TEMPLATED_STREAMS) -#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) -template<class T1> -inline std::ostream& print(std::ostream& o, const cons<T1, null_type>& t) { - return o << t.head; -} -#endif // BOOST_NO_TEMPLATED_STREAMS - -inline std::ostream& print(std::ostream& o, const null_type&) { return o; } - -template<class T1, class T2> -inline std::ostream& -print(std::ostream& o, const cons<T1, T2>& t) { - - const char d = format_info::get_manipulator(o, format_info::delimiter); - - o << t.head; - -#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) - if (tuples::length<T2>::value == 0) - return o; -#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION - o << d; - - return print(o, t.tail ); - -} - -template<class T> -inline bool handle_width(std::ostream& o, const T& t) { - std::streamsize width = o.width(); - if(width == 0) return false; - - std::ostringstream ss; - - ss.copyfmt(o); - ss.tie(0); - ss.width(0); - - ss << t; - o << ss.str(); - - return true; -} - - -#else - -#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) template<class CharType, class CharTrait, class T1> inline std::basic_ostream<CharType, CharTrait>& print(std::basic_ostream<CharType, CharTrait>& o, const cons<T1, null_type>& t) { return o << t.head; } -#endif // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION template<class CharType, class CharTrait> @@ -289,10 +178,6 @@ print(std::basic_ostream<CharType, CharTrait>& o, const cons<T1, T2>& t) { o << t.head; -#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) - if (tuples::length<T2>::value == 0) - return o; -#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION o << d; return print(o, t.tail); @@ -315,47 +200,9 @@ inline bool handle_width(std::basic_ostream<CharT, Traits>& o, const T& t) { return true; } -#endif // BOOST_NO_TEMPLATED_STREAMS } // namespace detail -#if defined (BOOST_NO_TEMPLATED_STREAMS) - -inline std::ostream& operator<<(std::ostream& o, const null_type& t) { - if (!o.good() ) return o; - if (detail::handle_width(o, t)) return o; - - const char l = - detail::format_info::get_manipulator(o, detail::format_info::open); - const char r = - detail::format_info::get_manipulator(o, detail::format_info::close); - - o << l; - o << r; - - return o; -} - -template<class T1, class T2> -inline std::ostream& operator<<(std::ostream& o, const cons<T1, T2>& t) { - if (!o.good() ) return o; - if (detail::handle_width(o, t)) return o; - - const char l = - detail::format_info::get_manipulator(o, detail::format_info::open); - const char r = - detail::format_info::get_manipulator(o, detail::format_info::close); - - o << l; - - detail::print(o, t); - - o << r; - - return o; -} - -#else template<class CharType, class CharTrait> inline std::basic_ostream<CharType, CharTrait>& @@ -395,7 +242,6 @@ operator<<(std::basic_ostream<CharType, CharTrait>& o, return o; } -#endif // BOOST_NO_TEMPLATED_STREAMS // ------------------------------------------------------------- @@ -403,99 +249,6 @@ operator<<(std::basic_ostream<CharType, CharTrait>& o, namespace detail { -#if defined (BOOST_NO_TEMPLATED_STREAMS) - -inline std::istream& -extract_and_check_delimiter( - std::istream& is, format_info::manipulator_type del) -{ - const char d = format_info::get_manipulator(is, del); - -#if defined (BOOST_NO_STD_LOCALE) - const bool is_delimiter = !isspace(d); -#else - const bool is_delimiter = (!std::isspace(d, is.getloc()) ); -#endif - - char c; - if (is_delimiter) { - is >> c; - if (is.good() && c!=d) { - is.setstate(std::ios::failbit); - } - } else { - is >> std::ws; - } - return is; -} - - -// Note: The order of the read functions is critical to let a -// (conforming?) compiler find and select the correct one. - -#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) -template<class T1> -inline std::istream & -read (std::istream &is, cons<T1, null_type>& t1) { - - if (!is.good()) return is; - - return is >> t1.head ; -} -#else -inline std::istream& read(std::istream& i, const null_type&) { return i; } -#endif // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION - -template<class T1, class T2> -inline std::istream& -read(std::istream &is, cons<T1, T2>& t1) { - - if (!is.good()) return is; - - is >> t1.head; - -#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) - if (tuples::length<T2>::value == 0) - return is; -#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION - - extract_and_check_delimiter(is, format_info::delimiter); - - return read(is, t1.tail); -} - -} // end namespace detail - -inline std::istream& -operator>>(std::istream &is, null_type&) { - - if (!is.good() ) return is; - - detail::extract_and_check_delimiter(is, detail::format_info::open); - detail::extract_and_check_delimiter(is, detail::format_info::close); - - return is; -} - - -template<class T1, class T2> -inline std::istream& -operator>>(std::istream& is, cons<T1, T2>& t1) { - - if (!is.good() ) return is; - - detail::extract_and_check_delimiter(is, detail::format_info::open); - - detail::read(is, t1); - - detail::extract_and_check_delimiter(is, detail::format_info::close); - - return is; -} - - - -#else template<class CharType, class CharTrait> inline std::basic_istream<CharType, CharTrait>& @@ -526,7 +279,6 @@ extract_and_check_delimiter( } -#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) template<class CharType, class CharTrait, class T1> inline std::basic_istream<CharType, CharTrait> & read (std::basic_istream<CharType, CharTrait> &is, cons<T1, null_type>& t1) { @@ -535,12 +287,6 @@ read (std::basic_istream<CharType, CharTrait> &is, cons<T1, null_type>& t1) { return is >> t1.head; } -#else -template<class CharType, class CharTrait> -inline std::basic_istream<CharType, CharTrait>& -read(std::basic_istream<CharType, CharTrait>& i, const null_type&) { return i; } - -#endif // !BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION template<class CharType, class CharTrait, class T1, class T2> inline std::basic_istream<CharType, CharTrait>& @@ -550,10 +296,6 @@ read(std::basic_istream<CharType, CharTrait> &is, cons<T1, T2>& t1) { is >> t1.head; -#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) - if (tuples::length<T2>::value == 0) - return is; -#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION extract_and_check_delimiter(is, format_info::delimiter); @@ -590,7 +332,6 @@ operator>>(std::basic_istream<CharType, CharTrait>& is, cons<T1, T2>& t1) { return is; } -#endif // BOOST_NO_TEMPLATED_STREAMS } // end of namespace tuples } // end of namespace boost |