LCOV - code coverage report
Current view: top level - url/grammar - delim_rule.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 16 16
Test Date: 2026-02-13 15:53:22 Functions: 100.0 % 6 6

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
       3              : // Copyright (c) 2022 Alan de Freitas (alandefreitas@gmail.com)
       4              : //
       5              : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       6              : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       7              : //
       8              : // Official repository: https://github.com/boostorg/url
       9              : //
      10              : 
      11              : #ifndef BOOST_URL_GRAMMAR_DELIM_RULE_HPP
      12              : #define BOOST_URL_GRAMMAR_DELIM_RULE_HPP
      13              : 
      14              : #include <boost/url/detail/config.hpp>
      15              : #include <boost/core/detail/string_view.hpp>
      16              : #include <boost/url/grammar/charset.hpp>
      17              : #include <boost/url/grammar/error.hpp>
      18              : #include <boost/url/grammar/type_traits.hpp>
      19              : #include <type_traits>
      20              : 
      21              : namespace boost {
      22              : namespace urls {
      23              : namespace grammar {
      24              : 
      25              : namespace implementation_defined {
      26              : struct ch_delim_rule
      27              : {
      28              :     using value_type = core::string_view;
      29              : 
      30              :     constexpr
      31        12441 :     ch_delim_rule(char ch) noexcept
      32        12441 :         : ch_(ch)
      33              :     {
      34        12441 :     }
      35              : 
      36              :     BOOST_URL_CXX20_CONSTEXPR
      37              :     system::result<value_type>
      38              :     parse(
      39              :         char const*& it,
      40              :         char const* end) const noexcept;
      41              : 
      42              : private:
      43              :     char ch_;
      44              : };
      45              : } // implementation_defined
      46              : 
      47              : /** Match a character literal
      48              : 
      49              :     This matches the specified character.
      50              :     The value is a reference to the character
      51              :     in the underlying buffer, expressed as a
      52              :     `core::string_view`. The function @ref squelch
      53              :     may be used to turn this into `void` instead.
      54              :     If there is no more input, the error code
      55              :     @ref error::need_more is returned.
      56              : 
      57              :     @par Value Type
      58              :     @code
      59              :     using value_type = core::string_view;
      60              :     @endcode
      61              : 
      62              :     @par Example
      63              :     Rules are used with the function @ref parse.
      64              :     @code
      65              :     system::result< core::string_view > rv = parse( ".", delim_rule('.') );
      66              :     @endcode
      67              : 
      68              :     @par BNF
      69              :     @code
      70              :     char        = %00-FF
      71              :     @endcode
      72              : 
      73              :     @param ch The character to match
      74              :     @return A rule which matches the character.
      75              : 
      76              :     @see
      77              :         @ref parse,
      78              :         @ref squelch.
      79              : */
      80              : constexpr
      81              : implementation_defined::ch_delim_rule
      82        12441 : delim_rule( char ch ) noexcept
      83              : {
      84        12441 :     return {ch};
      85              : }
      86              : 
      87              : //------------------------------------------------
      88              : 
      89              : namespace implementation_defined {
      90              : template<class CharSet>
      91              : struct cs_delim_rule
      92              : {
      93              :     using value_type = core::string_view;
      94              : 
      95              :     constexpr
      96            3 :     cs_delim_rule(
      97              :         CharSet const& cs) noexcept
      98              :         : cs_(cs)
      99              :     {
     100            3 :     }
     101              : 
     102              :     system::result<value_type>
     103          942 :     parse(
     104              :         char const*& it,
     105              :         char const* end) const noexcept
     106              :     {
     107          942 :         if(it == end)
     108              :         {
     109              :             // end
     110            1 :             BOOST_URL_RETURN_EC(
     111              :                 error::need_more);
     112              :         }
     113          941 :         if(! cs_(*it))
     114              :         {
     115              :             // wrong character
     116          392 :             BOOST_URL_RETURN_EC(
     117              :                 error::mismatch);
     118              :         }
     119         1098 :         return core::string_view{
     120          549 :             it++, 1 };
     121              :     }
     122              : 
     123              : private:
     124              :     CharSet cs_;
     125              : };
     126              : } // implementation_defined
     127              : 
     128              : /** Match a single character from a character set
     129              : 
     130              :     This matches exactly one character which
     131              :     belongs to the specified character set.
     132              :     The value is a reference to the character
     133              :     in the underlying buffer, expressed as a
     134              :     `core::string_view`. The function @ref squelch
     135              :     may be used to turn this into `void` instead.
     136              :     If there is no more input, the error code
     137              :     @ref error::need_more is returned.
     138              : 
     139              :     @par Value Type
     140              :     @code
     141              :     using value_type = core::string_view;
     142              :     @endcode
     143              : 
     144              :     @par Example
     145              :     Rules are used with the function @ref parse.
     146              :     @code
     147              :     system::result< core::string_view > rv = parse( "X", delim_rule( alpha_chars ) );
     148              :     @endcode
     149              : 
     150              :     @param cs The character set to use.
     151              :     @return A rule which matches a single character from the set.
     152              : 
     153              :     @see
     154              :         @ref alpha_chars,
     155              :         @ref parse,
     156              :         @ref squelch.
     157              : */
     158              : template<BOOST_URL_CONSTRAINT(CharSet) CS>
     159              : constexpr
     160              : typename std::enable_if<
     161              :     ! std::is_convertible<
     162              :         CS, char>::value,
     163              :     implementation_defined::cs_delim_rule<CS>>::type
     164            3 : delim_rule(
     165              :     CS const& cs) noexcept
     166              : {
     167              :     // If you get a compile error here it
     168              :     // means that your type does not meet
     169              :     // the requirements for a CharSet.
     170              :     // Please consult the documentation.
     171              :     static_assert(
     172              :         is_charset<CS>::value,
     173              :         "CharSet requirements not met");
     174              : 
     175            3 :     return implementation_defined::cs_delim_rule<CS>(cs);
     176              : }
     177              : 
     178              : } // grammar
     179              : } // urls
     180              : } // boost
     181              : 
     182              : #include <boost/url/grammar/impl/delim_rule.hpp>
     183              : 
     184              : #endif
        

Generated by: LCOV version 2.3