Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:53:27

0001 //
0002 // Copyright (c) 2021 Vinnie Falco (vinnie dot falco at gmail dot com)
0003 //
0004 // Distributed under the Boost Software License, Version 1.0. (See accompanying
0005 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0006 //
0007 // Official repository: https://github.com/boostorg/url
0008 //
0009 
0010 #ifndef BOOST_URL_GRAMMAR_ALNUM_CHARS_HPP
0011 #define BOOST_URL_GRAMMAR_ALNUM_CHARS_HPP
0012 
0013 #include <boost/url/detail/config.hpp>
0014 #include <boost/url/grammar/detail/charset.hpp>
0015 
0016 namespace boost {
0017 namespace urls {
0018 namespace grammar {
0019 
0020 /** The set of letters and digits
0021 
0022     @par Example
0023     Character sets are used with rules and the
0024     functions @ref find_if and @ref find_if_not.
0025     @code
0026     system::result< core::string_view > = parse( "Johnny42", token_rule( alnumchars ) );
0027     @endcode
0028 
0029     @par BNF
0030     @code
0031     ALNUM       = ALPHA / DIGIT
0032 
0033     ALPHA       = %x41-5A / %x61-7A
0034                 ; A-Z / a-z
0035 
0036     DIGIT       = %x30-39
0037                 ; 0-9
0038     @endcode
0039 
0040     @par Specification
0041     @li <a href="https://datatracker.ietf.org/doc/html/rfc5234#appendix-B.1"
0042         >B.1. Core Rules (rfc5234)</a>
0043 
0044     @see
0045         @ref find_if,
0046         @ref find_if_not,
0047         @ref parse,
0048         @ref token_rule.
0049 */
0050 #ifdef BOOST_URL_DOCS
0051 constexpr __implementation_defined__ alnum_chars;
0052 #else
0053 struct alnum_chars_t
0054 {
0055     constexpr
0056     bool
0057     operator()(char c) const noexcept
0058     {
0059         return
0060             (c >= '0' && c <= '9') ||
0061             (c >= 'A' && c <= 'Z') ||
0062             (c >= 'a' && c <= 'z');
0063     }
0064 
0065 #ifdef BOOST_URL_USE_SSE2
0066     char const*
0067     find_if(
0068         char const* first,
0069         char const* last) const noexcept
0070     {
0071         return detail::find_if_pred(
0072             *this, first, last);
0073     }
0074 
0075     char const*
0076     find_if_not(
0077         char const* first,
0078         char const* last) const noexcept
0079     {
0080         return detail::find_if_not_pred(
0081             *this, first, last);
0082     }
0083 #endif
0084 };
0085 
0086 constexpr alnum_chars_t alnum_chars{};
0087 #endif
0088 
0089 } // grammar
0090 } // urls
0091 } // boost
0092 
0093 #endif