11 #ifndef BOOST_PROPERTY_TREE_STREAM_TRANSLATOR_HPP_INCLUDED
12 #define BOOST_PROPERTY_TREE_STREAM_TRANSLATOR_HPP_INCLUDED
26 namespace boost {
namespace property_tree
29 template <
typename Ch,
typename Traits,
typename E,
typename Enabler =
void>
32 static void insert(std::basic_ostream<Ch, Traits>& s,
const E& e) {
35 static void extract(std::basic_istream<Ch, Traits>& s, E& e) {
44 template <
typename Ch,
typename Traits>
47 static void insert(std::basic_ostream<Ch, Traits>& s,
Ch e) {
50 static void extract(std::basic_istream<Ch, Traits>& s,
Ch& e) {
51 s.unsetf(std::ios_base::skipws);
60 template <
bool is_specialized>
76 !std::numeric_limits<T>::is_exact>
type;
85 std::numeric_limits<decayed>::is_specialized
87 static const bool value = type::value;
91 template <
typename Ch,
typename Traits,
typename F>
96 static void insert(std::basic_ostream<Ch, Traits>& s,
const F& e) {
97 #ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
98 s.precision(std::numeric_limits<F>::max_digits10);
100 s.precision(std::numeric_limits<F>::digits10 + 2);
104 static void extract(std::basic_istream<Ch, Traits>& s, F& e) {
112 template <
typename Ch,
typename Traits>
115 static void insert(std::basic_ostream<Ch, Traits>& s,
bool e) {
116 s.setf(std::ios_base::boolalpha);
119 static void extract(std::basic_istream<Ch, Traits>& s,
bool& e) {
124 s.setf(std::ios_base::boolalpha);
133 template <
typename Ch,
typename Traits>
136 static void insert(std::basic_ostream<Ch, Traits>& s,
signed char e) {
139 static void extract(std::basic_istream<Ch, Traits>& s,
signed char& e) {
143 if(
i > (std::numeric_limits<signed char>::max)() ||
144 i < (std::numeric_limits<signed char>::min)())
148 s.setstate(std::ios_base::badbit);
158 template <
typename Ch,
typename Traits>
161 static void insert(std::basic_ostream<Ch, Traits>& s,
unsigned char e) {
164 static void extract(std::basic_istream<Ch,Traits>& s,
unsigned char& e){
168 if(
i > (std::numeric_limits<unsigned char>::max)()) {
171 s.setstate(std::ios_base::badbit);
174 e = (
unsigned char)
i;
182 template <
typename Ch,
typename Traits,
typename Alloc,
typename E>
195 std::basic_istringstream<Ch, Traits, Alloc> iss(v);
199 if(iss.fail() || iss.bad() || iss.get() != Traits::eof()) {
205 std::basic_ostringstream<Ch, Traits, Alloc> oss;
221 template <
typename Ch,
typename Traits,
typename Alloc,
typename E>