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_VCHARS_HPP
11 : #define BOOST_URL_GRAMMAR_VCHARS_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 visible characters
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 > rv = parse( "JohnDoe", token_rule( vchars ) );
27 : @endcode
28 :
29 : @par BNF
30 : @code
31 : VCHAR = 0x21-0x7E
32 : ; visible (printing) characters
33 : @endcode
34 :
35 : @par Specification
36 : @li <a href="https://datatracker.ietf.org/doc/html/rfc5234#appendix-B.1"
37 : >B.1. Core Rules (rfc5234)</a>
38 :
39 : @see
40 : @ref find_if,
41 : @ref find_if_not,
42 : @ref parse,
43 : @ref token_rule.
44 : */
45 : #ifdef BOOST_URL_DOCS
46 : constexpr __implementation_defined__ vchars;
47 : #else
48 : struct vchars_t
49 : {
50 : constexpr
51 : bool
52 7 : operator()(char c) const noexcept
53 : {
54 7 : return c >= 0x21 && c <= 0x7e;
55 : }
56 :
57 : #ifdef BOOST_URL_USE_SSE2
58 : char const*
59 : find_if(
60 : char const* first,
61 : char const* last) const noexcept
62 : {
63 : return detail::find_if_pred(
64 : *this, first, last);
65 : }
66 :
67 : char const*
68 1 : find_if_not(
69 : char const* first,
70 : char const* last) const noexcept
71 : {
72 1 : return detail::find_if_not_pred(
73 1 : *this, first, last);
74 : }
75 : #endif
76 : };
77 :
78 : constexpr vchars_t vchars{};
79 : #endif
80 :
81 : } // grammar
82 : } // urls
83 : } // boost
84 :
85 : #endif
|