Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/spirit/home/classic/utility/regex.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
15:663ca0da4350 | 16:2665513ce2d3 |
---|---|
1 /*============================================================================= | |
2 Copyright (c) 2002-2003 Hartmut Kaiser | |
3 http://spirit.sourceforge.net/ | |
4 | |
5 Distributed under the Boost Software License, Version 1.0. (See accompanying | |
6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
7 =============================================================================*/ | |
8 #ifndef BOOST_SPIRIT_REGEX_HPP | |
9 #define BOOST_SPIRIT_REGEX_HPP | |
10 | |
11 #include <boost/version.hpp> | |
12 | |
13 /////////////////////////////////////////////////////////////////////////////// | |
14 // | |
15 // Include the regular expression library of boost (Boost.Regex) | |
16 // | |
17 // Note though, that this library is not distributed with Spirit. You have to | |
18 // obtain a separate copy from http://www.boost.org. | |
19 // | |
20 /////////////////////////////////////////////////////////////////////////////// | |
21 #if defined(BOOST_SPIRIT_NO_REGEX_LIB) && BOOST_VERSION < 103300 | |
22 // | |
23 // Include all the Boost.regex library. Please note that this will not work, | |
24 // if you are using the boost/spirit/regex.hpp header from more than one | |
25 // translation units. | |
26 // | |
27 #define BOOST_REGEX_NO_LIB | |
28 #define BOOST_REGEX_STATIC_LINK | |
29 #define BOOST_REGEX_NO_EXTERNAL_TEMPLATES | |
30 #include <boost/regex.hpp> | |
31 #include <boost/regex/src.cpp> | |
32 | |
33 #else | |
34 // | |
35 // Include the Boost.Regex headers only. Note, that you will have to link your | |
36 // application against the Boost.Regex library as described in the related | |
37 // documentation. | |
38 // This is the only way for Boost newer than V1.32.0 | |
39 // | |
40 #include <boost/regex.hpp> | |
41 #endif // defined(BOOST_SPIRIT_NO_REGEX_LIB) | |
42 | |
43 #include <boost/static_assert.hpp> | |
44 | |
45 /////////////////////////////////////////////////////////////////////////////// | |
46 #include <boost/spirit/home/classic/namespace.hpp> | |
47 #include <boost/spirit/home/classic/meta/as_parser.hpp> | |
48 #include <boost/spirit/home/classic/core/parser.hpp> | |
49 #include <boost/spirit/home/classic/utility/impl/regex.ipp> | |
50 #include <boost/detail/iterator.hpp> // for boost::detail::iterator_traits | |
51 | |
52 /////////////////////////////////////////////////////////////////////////////// | |
53 namespace boost { namespace spirit { | |
54 | |
55 BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN | |
56 | |
57 /////////////////////////////////////////////////////////////////////////////// | |
58 // rxstrlit class | |
59 template <typename CharT = char> | |
60 struct rxstrlit : public parser<rxstrlit<CharT> > { | |
61 | |
62 typedef rxstrlit self_t; | |
63 | |
64 rxstrlit(CharT const *first, CharT const *last) | |
65 : rx(first, last) {} | |
66 rxstrlit(CharT const *first) | |
67 : rx(first) {} | |
68 | |
69 template <typename ScannerT> | |
70 typename parser_result<self_t, ScannerT>::type | |
71 parse(ScannerT const& scan) const | |
72 { | |
73 // Due to limitations in the boost::regex library the iterators wrapped in | |
74 // the ScannerT object should be at least bidirectional iterators. Plain | |
75 // forward iterators do not work here. | |
76 typedef typename ScannerT::iterator_t iterator_t; | |
77 typedef | |
78 typename boost::detail::iterator_traits<iterator_t>::iterator_category | |
79 iterator_category; | |
80 | |
81 BOOST_STATIC_ASSERT(( | |
82 boost::is_convertible<iterator_category, | |
83 std::bidirectional_iterator_tag>::value | |
84 )); | |
85 | |
86 typedef typename parser_result<self_t, ScannerT>::type result_t; | |
87 return impl::contiguous_parser_parse<result_t>(rx, scan, scan); | |
88 } | |
89 | |
90 private: | |
91 impl::rx_parser<CharT> rx; // contains the boost regular expression parser | |
92 }; | |
93 | |
94 /////////////////////////////////////////////////////////////////////////////// | |
95 // Generator functions | |
96 template <typename CharT> | |
97 inline rxstrlit<CharT> | |
98 regex_p(CharT const *first) | |
99 { return rxstrlit<CharT>(first); } | |
100 | |
101 ////////////////////////////////// | |
102 template <typename CharT> | |
103 inline rxstrlit<CharT> | |
104 regex_p(CharT const *first, CharT const *last) | |
105 { return rxstrlit<CharT>(first, last); } | |
106 | |
107 /////////////////////////////////////////////////////////////////////////////// | |
108 BOOST_SPIRIT_CLASSIC_NAMESPACE_END | |
109 | |
110 }} // namespace BOOST_SPIRIT_CLASSIC_NS | |
111 | |
112 #endif // BOOST_SPIRIT_REGEX_HPP |