/usr/include/boost/spirit/home/karma/detail
Edit: /usr/include/boost/spirit/home/karma/detail/generate.hpp (5066B)
// Copyright (c) 2001-2011 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_DETAIL_GENERATE_FEB_20_2007_0959AM)
#define BOOST_SPIRIT_KARMA_DETAIL_GENERATE_FEB_20_2007_0959AM
#if defined(_MSC_VER)
#pragma once
#endif
#include
#include
#include
#include
#include
#include
#include
namespace boost { namespace spirit { namespace karma { namespace detail
{
///////////////////////////////////////////////////////////////////////////
template
struct generate_impl
{
// Report invalid expression error as early as possible.
// If you got an error_invalid_expression error message here,
// then the expression (Expr) is not a valid spirit karma expression.
// Did you intend to use the auto_ facilities while forgetting to
// #include ?
BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
};
template
struct generate_impl >::type>
{
template
static bool call(
OutputIterator& target_sink
, Expr const& expr)
{
typedef traits::properties_of<
typename result_of::compile::type
> properties;
// wrap user supplied iterator into our own output iterator
output_iterator > sink(target_sink);
return compile(expr).
generate(sink, unused, unused, unused);
}
template
static bool call(
detail::output_iterator& sink
, Expr const& expr)
{
return compile(expr).
generate(sink, unused, unused, unused);
}
};
///////////////////////////////////////////////////////////////////////////
template
struct generate_delimited_impl
{
// Report invalid expression error as early as possible.
// If you got an error_invalid_expression error message here,
// then the expression (Expr) is not a valid spirit karma expression.
// Did you intend to use the auto_ facilities while forgetting to
// #include ?
BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Expr);
};
template
struct generate_delimited_impl >::type>
{
template
static bool call(
OutputIterator& target_sink
, Expr const& expr
, Delimiter const& delimiter
, BOOST_SCOPED_ENUM(delimit_flag) pre_delimit)
{
typedef traits::properties_of<
typename result_of::compile::type
> properties;
typedef traits::properties_of<
typename result_of::compile::type
> delimiter_properties;
// wrap user supplied iterator into our own output iterator
detail::output_iterator
> sink(target_sink);
return call(sink, expr, delimiter, pre_delimit);
}
template
static bool call(
detail::output_iterator& sink
, Expr const& expr
, Delimiter const& delimiter
, BOOST_SCOPED_ENUM(delimit_flag) pre_delimit)
{
// Report invalid expression error as early as possible.
// If you got an error_invalid_expression error message here,
// then the delimiter is not a valid spirit karma expression.
BOOST_SPIRIT_ASSERT_MATCH(karma::domain, Delimiter);
typename result_of::compile::type const
delimiter_ = compile(delimiter);
if (pre_delimit == delimit_flag::predelimit &&
!karma::delimit_out(sink, delimiter_))
{
return false;
}
return compile(expr).
generate(sink, unused, delimiter_, unused);
}
};
}}}}
#endif