Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-19 09:47:37

0001 //  Copyright (c) 2001-2011 Hartmut Kaiser
0002 //  Copyright (c) 2001-2011 Joel de Guzman
0003 // 
0004 //  Distributed under the Boost Software License, Version 1.0. (See accompanying 
0005 //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0006 
0007 #ifndef BOOST_SPIRIT_KARMA_DIRECTIVE_UPPER_LOWER_CASE_HPP
0008 #define BOOST_SPIRIT_KARMA_DIRECTIVE_UPPER_LOWER_CASE_HPP
0009 
0010 #if defined(_MSC_VER)
0011 #pragma once
0012 #endif
0013 
0014 #include <boost/spirit/home/support/common_terminals.hpp>
0015 #include <boost/spirit/home/support/modify.hpp>
0016 #include <boost/spirit/home/karma/domain.hpp>
0017 #include <boost/spirit/home/karma/meta_compiler.hpp>
0018 
0019 namespace boost { namespace spirit
0020 {
0021     ///////////////////////////////////////////////////////////////////////////
0022     // Enablers
0023     ///////////////////////////////////////////////////////////////////////////
0024     template <typename CharEncoding>
0025     struct use_directive<
0026         karma::domain, tag::char_code<tag::upper, CharEncoding> > // enables upper
0027       : mpl::true_ {};
0028 
0029     template <typename CharEncoding>
0030     struct use_directive<
0031         karma::domain, tag::char_code<tag::lower, CharEncoding> > // enables lower
0032       : mpl::true_ {};
0033 
0034     ///////////////////////////////////////////////////////////////////////////
0035     template <typename CharEncoding>
0036     struct is_modifier_directive<karma::domain
0037         , tag::char_code<tag::upper, CharEncoding> >
0038       : mpl::true_ {};
0039 
0040     template <typename CharEncoding>
0041     struct is_modifier_directive<karma::domain
0042         , tag::char_code<tag::lower, CharEncoding> >
0043       : mpl::true_ {};
0044 
0045     ///////////////////////////////////////////////////////////////////////////
0046     // Don't add tag::upper or tag::lower if there is already one of those in
0047     // the modifier list
0048     template <typename Current, typename CharEncoding>
0049     struct compound_modifier<
0050             Current
0051           , tag::char_code<tag::upper, CharEncoding>
0052           , typename enable_if<
0053                 has_modifier<Current, tag::char_code<tag::lower, CharEncoding> > 
0054             >::type
0055           >
0056       : Current
0057     {
0058         compound_modifier()
0059           : Current() {}
0060 
0061         compound_modifier(Current const& current, 
0062                 tag::char_code<tag::upper, CharEncoding> const&)
0063           : Current(current) {}
0064     };
0065 
0066     template <typename Current, typename CharEncoding>
0067     struct compound_modifier<
0068             Current
0069           , tag::char_code<tag::lower, CharEncoding>
0070           , typename enable_if<
0071                 has_modifier<Current, tag::char_code<tag::upper, CharEncoding> > 
0072             >::type
0073           >
0074       : Current
0075     {
0076         compound_modifier()
0077           : Current() {}
0078 
0079         compound_modifier(Current const& current, 
0080                 tag::char_code<tag::lower, CharEncoding> const&)
0081           : Current(current) {}
0082     };
0083 }}
0084 
0085 #endif