Line data Source code
1 : //
2 : // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
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 : // Official repository: https://github.com/boostorg/url
8 : //
9 :
10 : #ifndef BOOST_URL_GRAMMAR_IMPL_PARSE_HPP
11 : #define BOOST_URL_GRAMMAR_IMPL_PARSE_HPP
12 :
13 : #include <boost/url/grammar/error.hpp>
14 : #include <boost/url/grammar/type_traits.hpp>
15 :
16 : namespace boost {
17 : namespace urls {
18 : namespace grammar {
19 :
20 : template<class R>
21 : BOOST_URL_NO_INLINE
22 : auto
23 66940 : parse(
24 : char const*& it,
25 : char const* end,
26 : R const& r) ->
27 : system::result<typename R::value_type>
28 : {
29 : // If this goes off, it means the rule
30 : // passed in did not meet the requirements.
31 : // Please check the documentation.
32 : static_assert(
33 : is_rule<R>::value,
34 : "Rule requirements not met");
35 :
36 66940 : return r.parse(it, end);
37 : }
38 :
39 : template<class R>
40 : BOOST_URL_NO_INLINE
41 : auto
42 5776 : parse(
43 : core::string_view s,
44 : R const& r) ->
45 : system::result<typename R::value_type>
46 : {
47 : // If this goes off, it means the rule
48 : // passed in did not meet the requirements.
49 : // Please check the documentation.
50 : static_assert(
51 : is_rule<R>::value,
52 : "Rule requirements not met");
53 :
54 5776 : auto it = s.data();
55 5776 : auto const end = it + s.size();
56 5776 : auto rv = r.parse(it, end);
57 10773 : if( rv &&
58 4997 : it != end)
59 233 : return error::leftover;
60 5543 : return rv;
61 633 : }
62 :
63 : } // grammar
64 : } // urls
65 : } // boost
66 :
67 : #endif
|