]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/spirit/home/karma/directive/upper_lower_case.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / spirit / home / karma / directive / upper_lower_case.hpp
1 // Copyright (c) 2001-2011 Hartmut Kaiser
2 // Copyright (c) 2001-2011 Joel de Guzman
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
7 #if !defined(SPIRIT_UPPER_LOWER_CASE_JANUARY_19_2009_1142AM)
8 #define SPIRIT_UPPER_LOWER_CASE_JANUARY_19_2009_1142AM
9
10 #if defined(_MSC_VER)
11 #pragma once
12 #endif
13
14 #include <boost/spirit/home/support/common_terminals.hpp>
15 #include <boost/spirit/home/support/modify.hpp>
16 #include <boost/spirit/home/karma/domain.hpp>
17 #include <boost/spirit/home/karma/meta_compiler.hpp>
18
19 namespace boost { namespace spirit
20 {
21 ///////////////////////////////////////////////////////////////////////////
22 // Enablers
23 ///////////////////////////////////////////////////////////////////////////
24 template <typename CharEncoding>
25 struct use_directive<
26 karma::domain, tag::char_code<tag::upper, CharEncoding> > // enables upper
27 : mpl::true_ {};
28
29 template <typename CharEncoding>
30 struct use_directive<
31 karma::domain, tag::char_code<tag::lower, CharEncoding> > // enables lower
32 : mpl::true_ {};
33
34 ///////////////////////////////////////////////////////////////////////////
35 template <typename CharEncoding>
36 struct is_modifier_directive<karma::domain
37 , tag::char_code<tag::upper, CharEncoding> >
38 : mpl::true_ {};
39
40 template <typename CharEncoding>
41 struct is_modifier_directive<karma::domain
42 , tag::char_code<tag::lower, CharEncoding> >
43 : mpl::true_ {};
44
45 ///////////////////////////////////////////////////////////////////////////
46 // Don't add tag::upper or tag::lower if there is already one of those in
47 // the modifier list
48 template <typename Current, typename CharEncoding>
49 struct compound_modifier<
50 Current
51 , tag::char_code<tag::upper, CharEncoding>
52 , typename enable_if<
53 has_modifier<Current, tag::char_code<tag::lower, CharEncoding> >
54 >::type
55 >
56 : Current
57 {
58 compound_modifier()
59 : Current() {}
60
61 compound_modifier(Current const& current,
62 tag::char_code<tag::upper, CharEncoding> const&)
63 : Current(current) {}
64 };
65
66 template <typename Current, typename CharEncoding>
67 struct compound_modifier<
68 Current
69 , tag::char_code<tag::lower, CharEncoding>
70 , typename enable_if<
71 has_modifier<Current, tag::char_code<tag::upper, CharEncoding> >
72 >::type
73 >
74 : Current
75 {
76 compound_modifier()
77 : Current() {}
78
79 compound_modifier(Current const& current,
80 tag::char_code<tag::lower, CharEncoding> const&)
81 : Current(current) {}
82 };
83 }}
84
85 #endif