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/http_proto 8 : // 9 : 10 : #ifndef BOOST_URL_GRAMMAR_TOKEN_RULE_HPP 11 : #define BOOST_URL_GRAMMAR_TOKEN_RULE_HPP 12 : 13 : #include <boost/url/detail/config.hpp> 14 : #include <boost/url/grammar/charset.hpp> 15 : #include <boost/url/error_types.hpp> 16 : #include <boost/core/detail/string_view.hpp> 17 : 18 : namespace boost { 19 : namespace urls { 20 : namespace grammar { 21 : 22 : /** Match a non-empty string of characters from a set 23 : 24 : If there is no more input, the error code 25 : @ref error::need_more is returned. 26 : 27 : @par Value Type 28 : @code 29 : using value_type = core::string_view; 30 : @endcode 31 : 32 : @par Example 33 : Rules are used with the function @ref parse. 34 : @code 35 : system::result< core::string_view > rv = parse( "abcdef", token_rule( alpha_chars ) ); 36 : @endcode 37 : 38 : @par BNF 39 : @code 40 : token = 1*( ch ) 41 : @endcode 42 : 43 : @param cs The character set to use 44 : 45 : @see 46 : @ref alpha_chars, 47 : @ref parse. 48 : */ 49 : #ifdef BOOST_URL_DOCS 50 : template<class CharSet> 51 : constexpr 52 : __implementation_defined__ 53 : token_rule( 54 : CharSet cs) noexcept; 55 : #else 56 : template<class CharSet> 57 : struct token_rule_t 58 : { 59 : using value_type = core::string_view; 60 : 61 : static_assert( 62 : is_charset<CharSet>::value, 63 : "CharSet requirements not met"); 64 : 65 : auto 66 : parse( 67 : char const*& it, 68 : char const* end 69 : ) const noexcept -> 70 : system::result<value_type>; 71 : 72 : private: 73 : template<class CharSet_> 74 : friend 75 : constexpr 76 : auto 77 : token_rule( 78 : CharSet_ const&) noexcept -> 79 : token_rule_t<CharSet_>; 80 : 81 : constexpr 82 103 : token_rule_t( 83 : CharSet const& cs) noexcept 84 103 : : cs_(cs) 85 : { 86 103 : } 87 : 88 : CharSet const cs_; 89 : }; 90 : 91 : template<class CharSet> 92 : constexpr 93 : auto 94 103 : token_rule( 95 : CharSet const& cs) noexcept -> 96 : token_rule_t<CharSet> 97 : { 98 103 : return {cs}; 99 : } 100 : #endif 101 : 102 : } // grammar 103 : } // urls 104 : } // boost 105 : 106 : #include <boost/url/grammar/impl/token_rule.hpp> 107 : 108 : #endif