Line data Source code
1 : // 2 : // Copyright (c) 2021 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_ALNUM_CHARS_HPP 11 : #define BOOST_URL_GRAMMAR_ALNUM_CHARS_HPP 12 : 13 : #include <boost/url/detail/config.hpp> 14 : #include <boost/url/grammar/detail/charset.hpp> 15 : 16 : namespace boost { 17 : namespace urls { 18 : namespace grammar { 19 : 20 : /** The set of letters and digits 21 : 22 : @par Example 23 : Character sets are used with rules and the 24 : functions @ref find_if and @ref find_if_not. 25 : @code 26 : system::result< core::string_view > = parse( "Johnny42", token_rule( alnumchars ) ); 27 : @endcode 28 : 29 : @par BNF 30 : @code 31 : ALNUM = ALPHA / DIGIT 32 : 33 : ALPHA = %x41-5A / %x61-7A 34 : ; A-Z / a-z 35 : 36 : DIGIT = %x30-39 37 : ; 0-9 38 : @endcode 39 : 40 : @par Specification 41 : @li <a href="https://datatracker.ietf.org/doc/html/rfc5234#appendix-B.1" 42 : >B.1. Core Rules (rfc5234)</a> 43 : 44 : @see 45 : @ref find_if, 46 : @ref find_if_not, 47 : @ref parse, 48 : @ref token_rule. 49 : */ 50 : #ifdef BOOST_URL_DOCS 51 : constexpr __implementation_defined__ alnum_chars; 52 : #else 53 : struct alnum_chars_t 54 : { 55 : constexpr 56 : bool 57 5496 : operator()(char c) const noexcept 58 : { 59 : return 60 5496 : (c >= '0' && c <= '9') || 61 12028 : (c >= 'A' && c <= 'Z') || 62 6532 : (c >= 'a' && c <= 'z'); 63 : } 64 : 65 : #ifdef BOOST_URL_USE_SSE2 66 : char const* 67 256 : find_if( 68 : char const* first, 69 : char const* last) const noexcept 70 : { 71 256 : return detail::find_if_pred( 72 256 : *this, first, last); 73 : } 74 : 75 : char const* 76 269 : find_if_not( 77 : char const* first, 78 : char const* last) const noexcept 79 : { 80 269 : return detail::find_if_not_pred( 81 269 : *this, first, last); 82 : } 83 : #endif 84 : }; 85 : 86 : constexpr alnum_chars_t alnum_chars{}; 87 : #endif 88 : 89 : } // grammar 90 : } // urls 91 : } // boost 92 : 93 : #endif