diff --git a/doc/quoted_manip.html b/doc/quoted_manip.html new file mode 100644 index 0000000..4391941 --- /dev/null +++ b/doc/quoted_manip.html @@ -0,0 +1,145 @@ + + + +
+ +![]() |
+
+ Quoted String
+ |
+
C++ Standard library stream I/O for strings that contain embedded spaces +can produce unexpected results. For example,
+++std::stringstream ss; +std::string original = "fooled you"; +std::string round_trip; + +ss << original; +ss >> round_trip; + +std::cout << original; // outputs: fooled you +std::cout << round_trip; // outputs: fooled + +assert(original == round_trip); // assert will fire+
The Boost quoted string stream I/O manipulator places delimiters, defaulted
+to the double-quote ("
), around strings on output, and strips off
+the delimiters on input. This ensures strings with embedded spaces round-trip as
+desired. For example,
++std::stringstream ss; +std::string original = "fooled you"; +std::string round_trip; + +ss << quoted(original); +ss >> quoted(round_trip); + +std::cout << quoted(original); // outputs: "fooled you" +std::cout << round_trip; // outputs: fooled you + +assert(original == round_trip); // assert will not fire+
namespace boost +{ + namespace io + { + // manipulator for const std::basic_string& + + template <class Char, class Traits, class Alloc> + unspecified-type1 quoted(const std::basic_string<Char, Traits, Alloc>& string, Char escape='\\', Char delim='\"'); + + // manipulator for const C-string* + + template <class Char> + unspecified-type2 quoted(const Char* string, Char escape='\\', Char delim='\"'); + + // manipulator for non-const std::basic_string& + + template <class Char, class Traits, class Alloc> + unspecified-type3 quoted(std::basic_string<Char, Traits, Alloc>& string, Char escape='\\', Char delim='\"'); + } +}+
unspecified_type1
, unspecified_type2
,
+and unspecified_type3
are implementation supplied
+types with implementation supplied operator<<
:
++template <class Char, class Traits> + std::basic_ostream<Char, Traits>& + operator<<(std::basic_ostream<Char, Traits>& os, const+unspecified_typeN
& proxy);Effects: Inserts characters into
+os
:+
+- +
delim
.- Each character in
+string
. If the character to be output is + equal toescape
ordelim
, as determined by+ operator==
, first outputescape
.- +
delim
.Remarks:
+string
,escape
, anddelim
+have the type and value of the corresponding arguments of the call to the+quoted
function that constructedproxy
.Returns:
+os
.
unspecified_type3
is an implementation supplied
+type with an implementation supplied operator>>
:
++template <class Char, class Traits> + std::basic_istream<Char, Traits>& + operator>>(std::basic_istream<Char, Traits>& is, const+unspecified_type3
& proxy);Effects: Extracts characters from
+os
:+
+- If the first character extracted is equal to delim, as determined by +
+operator==
, then:+
+- Turn off the
+skipws
flag.- +
string.clear()
- Until an unescaped
+delim
character is reached, extract + characters fromos
and append them tostring
, + except that if anescape
is reached, ignore it and append the + next character tostring
.- Discard the final
+delim
character.- Restore the
+skipws
flag to its original value.- Otherwise,
+os >> string
.Remarks:
+string
,escape
, anddelim
+have the type and value of the corresponding arguments of the call to the+quoted
function that constructedproxy
.Returns:
+is
.
The quoted()
stream manipulator emerged from discussions on the
+Boost developers mailing list. Participants included Beman Dawes, Rob Stewart,
+Alexander Lamaison, Eric Niebler, Vicente Botet, Andrey Semashev, Phil Richards,
+and Rob Murray. Eric Niebler's suggestions provided the basis for the name and
+form of the templates.
© Copyright Beman Dawes, 2002, 2006, 2007, 2009, 2010
+Distributed under the Boost Software License, Version 1.0. See +www.boost.org/LICENSE_1_0.txt
+Revised +18 June 2010
+ + + \ No newline at end of file diff --git a/include/boost/io/quoted_manip.hpp b/include/boost/io/quoted_manip.hpp index 325f14b..48253d3 100644 --- a/include/boost/io/quoted_manip.hpp +++ b/include/boost/io/quoted_manip.hpp @@ -1,12 +1,16 @@ +// boost/io/quoted_manip.hpp ---------------------------------------------------------// + // Copyright Beman Dawes 2010 // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt +// Library home page http://www.boost.org/libs/io + //--------------------------------------------------------------------------------------// -#ifndef BOOST_QUOTE_MANIP -#define BOOST_QUOTE_MANIP +#ifndef BOOST_IO_QUOTED_MANIP +#define BOOST_IO_QUOTED_MANIP #include