Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(646)

Unified Diff: third_party/boost/boost/fusion/sequence/io/detail/manip.hpp

Issue 113163: Add gmock into our dependencies. (Closed)
Patch Set: Making gmock work with windows. Requires adding boost. Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/boost/boost/fusion/sequence/io/detail/manip.hpp
diff --git a/third_party/boost/boost/fusion/sequence/io/detail/manip.hpp b/third_party/boost/boost/fusion/sequence/io/detail/manip.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..dd9a52659bd84696facb02ff60c19a82c1326f6a
--- /dev/null
+++ b/third_party/boost/boost/fusion/sequence/io/detail/manip.hpp
@@ -0,0 +1,316 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jeremiah Willcock
+ Copyright (c) 1999-2003 Jaakko Jarvi
+ Copyright (c) 2001-2006 Joel de Guzman
+
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+==============================================================================*/
+#if !defined(FUSION_MANIP_05052005_1200)
+#define FUSION_MANIP_05052005_1200
+
+#include <boost/config.hpp>
+#include <string>
+#include <vector>
+#include <cctype>
+
+// Tuple I/O manipulators
+
+#define FUSION_GET_CHAR_TYPE(T) typename T::char_type
+#define FUSION_GET_TRAITS_TYPE(T) typename T::traits_type
+
+#if defined (BOOST_NO_TEMPLATED_STREAMS)
+#define FUSION_STRING_OF_STREAM(Stream) std::string
+#else
+#define FUSION_STRING_OF_STREAM(Stream) \
+ std::basic_string< \
+ FUSION_GET_CHAR_TYPE(Stream) \
+ , FUSION_GET_TRAITS_TYPE(Stream) \
+ >
+#endif
+
+//$$$ these should be part of the public API$$$
+//$$$ rename tuple_open, tuple_close and tuple_delimiter to
+// open, close and delimeter and add these synonyms to the
+// TR1 tuple module.
+
+namespace boost { namespace fusion
+{
+ namespace detail
+ {
+ template <typename Tag>
+ int get_xalloc_index(Tag* = 0)
+ {
+ // each Tag will have a unique index
+ static int index = std::ios::xalloc();
+ return index;
+ }
+
+ template <typename Stream, typename Tag, typename T>
+ struct stream_data
+ {
+ struct arena
+ {
+ ~arena()
+ {
+ for (
+ typename std::vector<T*>::iterator i = data.begin()
+ ; i != data.end()
+ ; ++i)
+ {
+ delete *i;
+ }
+ }
+
+ std::vector<T*> data;
+ };
+
+ static void attach(Stream& stream, T const& data)
+ {
+ static arena ar; // our arena
+ ar.data.push_back(new T(data));
+ stream.pword(get_xalloc_index<Tag>()) = ar.data.back();
+ }
+
+ static T const* get(Stream& stream)
+ {
+ return (T const*)stream.pword(get_xalloc_index<Tag>());
+ }
+ };
+
+ template <typename Tag, typename Stream>
+ class string_ios_manip
+ {
+ public:
+
+ typedef FUSION_STRING_OF_STREAM(Stream) string_type;
+
+ typedef stream_data<Stream, Tag, string_type> stream_data_t;
+
+ string_ios_manip(Stream& str_)
+ : stream(str_)
+ {}
+
+ void
+ set(string_type const& s)
+ {
+ stream_data_t::attach(stream, s);
+ }
+
+ void
+ print(char const* default_) const
+ {
+ // print a delimiter
+ string_type const* p = stream_data_t::get(stream);
+ if (p)
+ stream << *p;
+ else
+ stream << default_;
+ }
+
+ void
+ read(char const* default_) const
+ {
+ // read a delimiter
+ string_type const* p = stream_data_t::get(stream);
+ using namespace std;
+ ws(stream);
+
+ if (p)
+ {
+ typedef typename string_type::const_iterator iterator;
+ for (iterator i = p->begin(); i != p->end(); ++i)
+ check_delim(*i);
+ }
+ else
+ {
+ while (*default_)
+ check_delim(*default_++);
+ }
+ }
+
+ private:
+
+ template <typename Char>
+ void
+ check_delim(Char c) const
+ {
+ if (!isspace(c))
+ {
+ if (stream.get() != c)
+ {
+ stream.unget();
+ stream.setstate(std::ios::failbit);
+ }
+ }
+ }
+
+ Stream& stream;
+ };
+
+ } // detail
+
+#if defined (BOOST_NO_TEMPLATED_STREAMS)
+
+#define STD_TUPLE_DEFINE_MANIPULATOR(name) \
+ namespace detail \
+ { \
+ struct name##_tag; \
+ \
+ struct name##_type \
+ { \
+ typedef std::string string_type; \
+ string_type data; \
+ name##_type(const string_type& d): data(d) {} \
+ }; \
+ \
+ template <typename Stream> \
+ Stream& operator>>(Stream& s, const name##_type& m) \
+ { \
+ string_ios_manip<name##_tag, Stream>(s).set(m.data); \
+ return s; \
+ } \
+ \
+ template <typename Stream> \
+ Stream& operator<<(Stream& s, const name##_type& m) \
+ { \
+ string_ios_manip<name##_tag, Stream>(s).set(m.data); \
+ return s; \
+ } \
+ }
+
+#define STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(name) \
+ inline detail::name##_type \
+ name(const std::string& s) \
+ { \
+ return detail::name##_type(s); \
+ } \
+ \
+ inline detail::name##_type \
+ name(const char* s) \
+ { \
+ return detail::name##_type(std::string(s)); \
+ } \
+ \
+ inline detail::name##_type \
+ name(char c) \
+ { \
+ return detail::name##_type(std::string(1, c)); \
+ }
+
+#else // defined(BOOST_NO_TEMPLATED_STREAMS)
+
+#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+
+#define STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(name) \
+ template <typename Char, typename Traits> \
+ inline detail::name##_type<Char, Traits> \
+ name(const std::basic_string<Char, Traits>& s) \
+ { \
+ return detail::name##_type<Char, Traits>(s); \
+ } \
+ \
+ inline detail::name##_type<char> \
+ name(char const* s) \
+ { \
+ return detail::name##_type<char>(std::basic_string<char>(s)); \
+ } \
+ \
+ inline detail::name##_type<wchar_t> \
+ name(wchar_t const* s) \
+ { \
+ return detail::name##_type<wchar_t>(std::basic_string<wchar_t>(s)); \
+ } \
+ \
+ inline detail::name##_type<char> \
+ name(char c) \
+ { \
+ return detail::name##_type<char>(std::basic_string<char>(1, c)); \
+ } \
+ \
+ inline detail::name##_type<wchar_t> \
+ name(wchar_t c) \
+ { \
+ return detail::name##_type<wchar_t>(std::basic_string<wchar_t>(1, c)); \
+ }
+
+#else // defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
+
+#define STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(name) \
+ template <typename Char, typename Traits> \
+ inline detail::name##_type<Char, Traits> \
+ name(const std::basic_string<Char, Traits>& s) \
+ { \
+ return detail::name##_type<Char, Traits>(s); \
+ } \
+ \
+ template <typename Char> \
+ inline detail::name##_type<Char> \
+ name(Char s[]) \
+ { \
+ return detail::name##_type<Char>(std::basic_string<Char>(s)); \
+ } \
+ \
+ template <typename Char> \
+ inline detail::name##_type<Char> \
+ name(Char const s[]) \
+ { \
+ return detail::name##_type<Char>(std::basic_string<Char>(s)); \
+ } \
+ \
+ template <typename Char> \
+ inline detail::name##_type<Char> \
+ name(Char c) \
+ { \
+ return detail::name##_type<Char>(std::basic_string<Char>(1, c)); \
+ }
+
+#endif
+
+#define STD_TUPLE_DEFINE_MANIPULATOR(name) \
+ namespace detail \
+ { \
+ struct name##_tag; \
+ \
+ template <typename Char, typename Traits = std::char_traits<Char> > \
+ struct name##_type \
+ { \
+ typedef std::basic_string<Char, Traits> string_type; \
+ string_type data; \
+ name##_type(const string_type& d): data(d) {} \
+ }; \
+ \
+ template <typename Stream, typename Char, typename Traits> \
+ Stream& operator>>(Stream& s, const name##_type<Char,Traits>& m) \
+ { \
+ string_ios_manip<name##_tag, Stream>(s).set(m.data); \
+ return s; \
+ } \
+ \
+ template <typename Stream, typename Char, typename Traits> \
+ Stream& operator<<(Stream& s, const name##_type<Char,Traits>& m) \
+ { \
+ string_ios_manip<name##_tag, Stream>(s).set(m.data); \
+ return s; \
+ } \
+ } \
+
+#endif // defined(BOOST_NO_TEMPLATED_STREAMS)
+
+ STD_TUPLE_DEFINE_MANIPULATOR(tuple_open)
+ STD_TUPLE_DEFINE_MANIPULATOR(tuple_close)
+ STD_TUPLE_DEFINE_MANIPULATOR(tuple_delimiter)
+
+ STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(tuple_open)
+ STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(tuple_close)
+ STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(tuple_delimiter)
+
+#undef STD_TUPLE_DEFINE_MANIPULATOR
+#undef STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS
+#undef FUSION_STRING_OF_STREAM
+#undef FUSION_GET_CHAR_TYPE
+#undef FUSION_GET_TRAITS_TYPE
+
+}}
+
+#endif
« no previous file with comments | « third_party/boost/boost/fusion/sequence/io/detail/in.hpp ('k') | third_party/boost/boost/fusion/sequence/io/detail/out.hpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698