📄 collector.hpp
字号:
/*============================================================================= Copyright (c) 2002 2004 2006 Joel de Guzman http://spirit.sourceforge.net/ Use, modification and distribution is subject to 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_QUICKBOOK_COLLECTOR_HPP)#define BOOST_SPIRIT_QUICKBOOK_COLLECTOR_HPP#include <string>#include <stack>#include <boost/ref.hpp>#include <boost/shared_ptr.hpp>#include <boost/noncopyable.hpp>#include <boost/iostreams/device/back_inserter.hpp>#include <boost/iostreams/filtering_stream.hpp>namespace quickbook{ struct string_stream { typedef boost::iostreams::filtering_ostream ostream; string_stream(); string_stream(string_stream const& other); string_stream& operator=(string_stream const& other); std::string const& str() const { stream_ptr->flush(); return *buffer_ptr.get(); } std::ostream& get() const { return *stream_ptr.get(); } void clear() { buffer_ptr->clear(); } void swap(std::string& other) { stream_ptr->flush(); std::swap(other, *buffer_ptr.get()); } void append(std::string const& other) { stream_ptr->flush(); *buffer_ptr.get() += other; } private: boost::shared_ptr<std::string> buffer_ptr; boost::shared_ptr<ostream> stream_ptr; }; struct collector : boost::noncopyable { collector(); collector(string_stream& out); ~collector(); void push(); void pop(); std::ostream& get() const { return top.get().get(); } std::string const& str() const { return top.get().str(); } void clear() { top.get().clear(); } void swap(std::string& other) { top.get().swap(other); } void append(std::string const& other) { top.get().append(other); } private: std::stack<string_stream> streams; boost::reference_wrapper<string_stream> main; boost::reference_wrapper<string_stream> top; string_stream default_; }; template <typename T> inline collector& operator<<(collector& out, T const& val) { out.get() << val; return out; } inline collector& operator<<(collector& out, std::string const& val) { out.append(val); return out; }}#endif // BOOST_SPIRIT_QUICKBOOK_COLLECTOR_HPP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -