12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #if !defined(BOOST_SPIRIT_KARMA_REFERENCE_APR_17_2009_1057PM)
- #define BOOST_SPIRIT_KARMA_REFERENCE_APR_17_2009_1057PM
- #if defined(_MSC_VER)
- #pragma once
- #endif
- #include <boost/spirit/home/karma/meta_compiler.hpp>
- #include <boost/spirit/home/karma/generator.hpp>
- #include <boost/spirit/home/support/info.hpp>
- #include <boost/spirit/home/support/handles_container.hpp>
- #include <boost/type_traits/remove_const.hpp>
- #include <boost/ref.hpp>
- namespace boost { namespace spirit { namespace karma
- {
-
-
-
- template <typename Subject>
- struct reference : generator<reference<Subject> >
- {
- typedef mpl::int_<generator_properties::all_properties> properties;
- typedef Subject subject_type;
- reference(Subject& subject)
- : ref(subject) {}
- template <typename Context, typename Unused>
- struct attribute : Subject::template attribute<Context, Unused> {};
-
-
- template <typename OutputIterator, typename Context
- , typename Delimiter, typename Attribute>
- bool generate(OutputIterator& sink, Context& context
- , Delimiter const& delim, Attribute const& attr) const
- {
- return ref.get().generate(sink, context, delim, attr);
- }
-
-
- template <typename OutputIterator, typename Context
- , typename Delimiter>
- bool generate(OutputIterator& sink, Context& context
- , Delimiter const& delim, unused_type) const
- {
- return ref.get().generate(sink, context, delim, context.attributes);
- }
-
-
- template <typename OutputIterator, typename Delimiter>
- bool generate(OutputIterator& sink, unused_type
- , Delimiter const& delim, unused_type) const
- {
- return ref.get().generate(sink, unused, delim, unused);
- }
- template <typename Context>
- info what(Context& context) const
- {
-
- return ref.get().what(context);
- }
- boost::reference_wrapper<Subject> ref;
- };
- }}}
- namespace boost { namespace spirit { namespace traits
- {
-
- template <typename Subject, typename Attribute, typename Context
- , typename Iterator>
- struct handles_container<karma::reference<Subject>, Attribute
- , Context, Iterator>
- : handles_container<typename remove_const<Subject>::type, Attribute
- , Context, Iterator>
- {};
- }}}
- #endif
|