⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stream.hpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 HPP
字号:
//  Copyright (c) 2001-2008 Hartmut Kaiser////  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(BOOST_SPIRIT_KARMA_STREAM_MAY_01_2007_0310PM)#define BOOST_SPIRIT_KARMA_STREAM_MAY_01_2007_0310PM#if defined(_MSC_VER) && (_MSC_VER >= 1020)#pragma once      // MS compatible compilers support #pragma once#endif#include <boost/spirit/home/karma/stream/detail/format_manip.hpp>#include <boost/spirit/home/karma/stream/detail/iterator_ostream.hpp>#include <boost/spirit/home/support/detail/hold_any.hpp>#include <iosfwd>///////////////////////////////////////////////////////////////////////////////namespace boost { namespace spirit{    // overload the streaming operators for the unused_type    template <typename Char, typename Traits>    inline std::basic_ostream<Char, Traits>&    operator<< (std::basic_ostream<Char, Traits>& os, unused_type)    {        return os;    }}}///////////////////////////////////////////////////////////////////////////////namespace boost { namespace spirit { namespace karma{    template <typename Char>    struct any_stream    {        template <typename Component, typename Context, typename Unused>        struct attribute        {            typedef spirit::hold_any type;        };        // any_stream has a parameter attached        // this overload will be used in the normal case (not called from        // format_manip).        template <typename Component, typename OutputIterator,            typename Context, typename Delimiter, typename Parameter>        static bool        generate(Component const& component, OutputIterator& sink,            Context& /*ctx*/, Delimiter const& d, Parameter const& param)        {            typedef                karma::detail::iterator_sink<OutputIterator, Char>            sink_device;            iostreams::stream<sink_device> ostr(sink);            ostr << param << std::flush;        // use existing operator<<()            if (ostr.good()) {                karma::delimit(sink, d);        // always do post-delimiting                return true;            }            return false;        }        // this is a special overload to detect if the output iterator has been        // generated by a format_manip object.        template <            typename Component, typename T, typename Traits,            typename Context, typename Delimiter, typename Parameter        >        static bool        generate(Component const& component,            karma::detail::output_iterator<                karma::detail::ostream_iterator<T, Char, Traits>            >& sink, Context&, Delimiter const& d, Parameter const& param)        {            typedef karma::detail::output_iterator<                karma::detail::ostream_iterator<T, Char, Traits>            > output_iterator;            typedef                karma::detail::iterator_sink<output_iterator, Char>            sink_device;            iostreams::stream<sink_device> ostr(sink);            ostr.imbue(sink.get_ostream().getloc());            ostr << param << std::flush;        // use existing operator<<()            if (ostr.good()) {                karma::delimit(sink, d);        // always do post-delimiting                return true;            }            return false;        }        // this any_stream has no parameter attached, it needs to have been        // initialized from a value/variable        template <typename Component, typename OutputIterator,            typename Context, typename Delimiter>        static bool        generate(Component const&, OutputIterator&, Context&, Delimiter const&,            unused_type)        {            BOOST_MPL_ASSERT_MSG(false, stream__not_usable_without_attribute,              (Component, OutputIterator, Delimiter));            return false;        }        template <typename Component, typename Context>        static std::string what(Component const& component, Context const& ctx)        {            return "any-stream";        }    };    ///////////////////////////////////////////////////////////////////////////    template <typename Char>    struct stream_director    {        template <typename Component, typename Context, typename Unused>        struct attribute        {            typedef unused_type type;        };        // stream_director has a parameter attached        template <typename Component, typename OutputIterator,            typename Context, typename Delimiter, typename Parameter>        static bool        generate(Component const& component, OutputIterator& sink,            Context& /*ctx*/, Delimiter const& d, Parameter const&)        {            typedef                karma::detail::iterator_sink<OutputIterator, Char>            sink_device;            // use existing operator<<()            iostreams::stream<sink_device> ostr(sink);            ostr << fusion::at_c<0>(component.elements) << std::flush;            if (ostr.good()) {                karma::delimit(sink, d);        // always do post-delimiting                return true;            }            return false;        }        // this is a special overload to detect if the output iterator has been        // generated by a format_manip object.        template <            typename Component, typename T, typename Traits,            typename Context, typename Delimiter, typename Parameter        >        static bool        generate(Component const& component,            karma::detail::output_iterator<                karma::detail::ostream_iterator<T, Char, Traits>            >& sink, Context&, Delimiter const& d, Parameter const&)        {            typedef karma::detail::output_iterator<                karma::detail::ostream_iterator<T, Char, Traits>            > output_iterator;            typedef                karma::detail::iterator_sink<output_iterator, Char>            sink_device;            // use existing operator<<()            iostreams::stream<sink_device> ostr(sink);            ostr.imbue(sink.get_ostream().getloc());            ostr << fusion::at_c<0>(component.elements) << std::flush;            if (ostr.good()) {                karma::delimit(sink, d);        // always do post-delimiting                return true;            }            return false;        }        template <typename Component, typename Context>        static std::string what(Component const& component, Context const& ctx)        {            return "stream";        }    };}}}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -