]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/wave/grammars/cpp_has_include_grammar_gen.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / boost / wave / grammars / cpp_has_include_grammar_gen.hpp
1 /*=============================================================================
2 Boost.Wave: A Standard compliant C++ preprocessor library
3
4 http://www.boost.org/
5
6 Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost
7 Software License, Version 1.0. (See accompanying file
8 LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 =============================================================================*/
10
11 #if !defined(BOOST_CPP_HAS_INCLUDE_GRAMMAR_GEN_HPP_825BE9F5_98A3_400D_A97C_AD76B3B08632_INCLUDED)
12 #define BOOST_CPP_HAS_INCLUDE_GRAMMAR_GEN_HPP_825BE9F5_98A3_400D_A97C_AD76B3B08632_INCLUDED
13
14 #include <boost/wave/wave_config.hpp>
15
16 #include <list>
17
18 #include <boost/spirit/include/classic_parser.hpp>
19 #include <boost/pool/pool_alloc.hpp>
20
21 #include <boost/wave/util/unput_queue_iterator.hpp>
22
23 // this must occur after all of the includes and before any code appears
24 #ifdef BOOST_HAS_ABI_HEADERS
25 #include BOOST_ABI_PREFIX
26 #endif
27
28 // suppress warnings about dependent classes not being exported from the dll
29 #ifdef BOOST_MSVC
30 #pragma warning(push)
31 #pragma warning(disable : 4251 4231 4660)
32 #endif
33
34 ///////////////////////////////////////////////////////////////////////////////
35 namespace boost {
36 namespace wave {
37 namespace grammars {
38
39 template <typename LexIteratorT>
40 struct BOOST_WAVE_DECL has_include_grammar_gen
41 {
42 typedef typename LexIteratorT::token_type token_type;
43 typedef std::list<token_type, boost::fast_pool_allocator<token_type> >
44 token_sequence_type;
45
46 // The parse_operator_has_include function is instantiated manually twice to
47 // simplify the explicit specialization of this template. This way the user
48 // has only to specify one template parameter (the lexer iterator type) to
49 // correctly formulate the required explicit specialization.
50 // This results in no code overhead, because otherwise the function would be
51 // generated by the compiler twice anyway.
52
53 typedef boost::wave::util::unput_queue_iterator<
54 typename token_sequence_type::iterator, token_type, token_sequence_type>
55 iterator1_type;
56
57 typedef boost::wave::util::unput_queue_iterator<
58 LexIteratorT, token_type, token_sequence_type>
59 iterator2_type;
60
61 // parse the operator has_include and return the found qualified name
62 static boost::spirit::classic::parse_info<iterator1_type>
63 parse_operator_has_include (iterator1_type const &first,
64 iterator1_type const &last, token_sequence_type &found_qualified_name,
65 bool &is_quoted_filename, bool &is_system);
66
67 static boost::spirit::classic::parse_info<iterator2_type>
68 parse_operator_has_include (iterator2_type const &first,
69 iterator2_type const &last, token_sequence_type &found_qualified_name,
70 bool &is_quoted_filename, bool &is_system);
71 };
72
73 ///////////////////////////////////////////////////////////////////////////////
74 } // namespace grammars
75 } // namespace wave
76 } // namespace boost
77
78 #ifdef BOOST_MSVC
79 #pragma warning(pop)
80 #endif
81
82 // the suffix header occurs after all of the code
83 #ifdef BOOST_HAS_ABI_HEADERS
84 #include BOOST_ABI_SUFFIX
85 #endif
86
87 #endif // !defined(BOOST_CPP_HAS_INCLUDE_GRAMMAR_GEN_HPP_825BE9F5_98A3_400D_A97C_AD76B3B08632_INCLUDED)