19 #ifndef ROOT_Math_GenVector_GenVectorIO
20 #define ROOT_Math_GenVector_GenVectorIO 1
35 enum manip_t { open, sep, close, bitforbit };
41 static int const ios_data[4] = { std::ios::xalloc()
52 template<
class char_t,
class traits_t >
54 get_manip( std::basic_ios<char_t,traits_t> & ios
58 char_t ch =
static_cast<char_t
>( ios.iword( ios_data(m) ) );
62 {
default :
return ios.widen(
'?' );
63 case open :
return ios.widen(
'(' );
64 case close :
return ios.widen(
')' );
65 case sep :
return ios.widen(
',' );
66 case bitforbit :
return ch;
72 template<
class char_t,
class traits_t >
74 set_manip( std::basic_ios<char_t,traits_t> & ios
79 ios.iword( ios_data(m) ) =
static_cast<long>(ch);
84 template<
class char_t >
89 manipulator( manip_t m
96 template<
class traits_t >
98 set( std::basic_ios<char_t,traits_t> & ios )
const
100 set_manip<char_t>( ios, fMan, fChar );
110 template<
class char_t,
class traits_t >
112 std::basic_istream<char_t,traits_t> &
113 require_delim( std::basic_istream<char_t,traits_t> & is
117 char_t delim = get_manip( is, m );
118 if( std::isspace(delim) )
return is;
123 is.setstate( std::ios::failbit );
130 template<
class char_t,
class traits_t >
132 std::basic_ostream<char_t,traits_t> &
133 operator << ( std::basic_ostream<char_t,traits_t> & os
134 , detail::manipulator<char_t>
const & manip
144 template<
class char_t,
class traits_t >
146 std::basic_istream<char_t,traits_t> &
147 operator >> ( std::basic_istream<char_t,traits_t> & is
148 , detail::manipulator<char_t>
const & manip
164 template<
class char_t >
166 detail::manipulator<char_t>
167 set_open( char_t ch )
169 return detail::manipulator<char_t>( detail::open, ch );
174 template<
class char_t >
176 detail::manipulator<char_t>
177 set_separator( char_t ch )
179 return detail::manipulator<char_t>( detail::sep, ch );
184 template<
class char_t >
186 detail::manipulator<char_t>
187 set_close( char_t ch )
189 return detail::manipulator<char_t>( detail::close, ch );
194 template<
class char_t,
class traits_t >
196 std::basic_ios<char_t,traits_t> &
197 human_readable( std::basic_ios<char_t,traits_t> & ios )
199 ios.iword( ios_data(detail::bitforbit) ) = 0L;
205 template<
class char_t,
class traits_t >
207 std::basic_ios<char_t,traits_t> &
208 machine_readable( std::basic_ios<char_t,traits_t> & ios )
210 ios.iword( ios_data(detail::bitforbit) ) = 1L;
221 #endif // ROOT_Math_GenVector_GenVectorIO