//  Copyright (c) 2001-2010 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_UNUSED_DELIMITER_MAR_15_2009_0923PM)
#define BOOST_SPIRIT_KARMA_UNUSED_DELIMITER_MAR_15_2009_0923PM

#if defined(_MSC_VER)
#pragma once
#endif

#include <boost/spirit/home/support/unused.hpp>

namespace boost { namespace spirit { namespace karma { namespace detail
{
    template <typename Delimiter>
    struct unused_delimiter : unused_type
    {
        unused_delimiter(Delimiter const& delim)
          : delimiter(delim) {}
        Delimiter const& delimiter;

    private:
        // silence MSVC warning C4512: assignment operator could not be generated
        unused_delimiter& operator= (unused_delimiter const&);
    };

    // If a surrounding verbatim[] directive was specified, the current
    // delimiter is of the type unused_delimiter. In this case we 
    // re-activate the delimiter which was active before the verbatim[]
    // directive.
    template <typename Delimiter, typename Default>
    inline Delimiter const& 
    get_delimiter(unused_delimiter<Delimiter> const& u, Default const&)
    {
        return u.delimiter;
    }

    // If no surrounding verbatim[] directive was specified we activate
    // a single space as the delimiter to use.
    template <typename Delimiter, typename Default>
    inline Default const& 
    get_delimiter(Delimiter const&, Default const& d)
    {
        return d;
    }

}}}}

#endif
