// 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_AUTO_DEC_01_2009_0743PM) | |
#define BOOST_SPIRIT_KARMA_DETAIL_GENERATE_AUTO_DEC_01_2009_0743PM | |
#if defined(_MSC_VER) | |
#pragma once | |
#endif | |
#include <boost/spirit/home/karma/generate.hpp> | |
#include <boost/spirit/home/karma/auto/create_generator.hpp> | |
#include <boost/utility/enable_if.hpp> | |
#include <boost/mpl/not.hpp> | |
#include <boost/mpl/and.hpp> | |
namespace boost { namespace spirit { namespace karma { namespace detail | |
{ | |
/////////////////////////////////////////////////////////////////////////// | |
template <typename Expr> | |
struct generate_impl<Expr | |
, typename enable_if< | |
mpl::and_< | |
traits::meta_create_exists<karma::domain, Expr> | |
, mpl::not_<traits::matches<karma::domain, Expr> > > | |
>::type> | |
{ | |
template <typename OutputIterator> | |
static bool call( | |
OutputIterator& sink | |
, Expr const& expr) | |
{ | |
return karma::generate(sink, create_generator<Expr>(), expr); | |
} | |
}; | |
/////////////////////////////////////////////////////////////////////////// | |
template <typename Expr> | |
struct generate_delimited_impl<Expr | |
, typename enable_if< | |
mpl::and_< | |
traits::meta_create_exists<karma::domain, Expr> | |
, mpl::not_<traits::matches<karma::domain, Expr> > > | |
>::type> | |
{ | |
template <typename OutputIterator, typename Delimiter> | |
static bool call( | |
OutputIterator& sink | |
, Expr const& expr | |
, Delimiter const& delimiter | |
, BOOST_SCOPED_ENUM(delimit_flag) pre_delimit) | |
{ | |
return karma::generate_delimited( | |
sink, create_generator<Expr>(), delimiter, pre_delimit, expr); | |
} | |
}; | |
}}}} | |
#endif | |