LCOV - code coverage report
Current view: top level - boost/url/grammar/variant_rule.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 3 3
Test Date: 2024-07-10 02:48:26 Functions: 100.0 % 2 2

            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/url
       8              : //
       9              : 
      10              : #ifndef BOOST_URL_GRAMMAR_VARIANT_RULE_HPP
      11              : #define BOOST_URL_GRAMMAR_VARIANT_RULE_HPP
      12              : 
      13              : #include <boost/url/detail/config.hpp>
      14              : #include <boost/url/error_types.hpp>
      15              : #include <boost/url/variant.hpp>
      16              : #include <boost/url/grammar/detail/tuple.hpp>
      17              : 
      18              : namespace boost {
      19              : namespace urls {
      20              : namespace grammar {
      21              : 
      22              : /** Match one of a set of rules
      23              : 
      24              :     Each specified rule is tried in sequence.
      25              :     When the first match occurs, the result
      26              :     is stored and returned in the variant. If
      27              :     no match occurs, an error is returned.
      28              : 
      29              :     @par Value Type
      30              :     @code
      31              :     using value_type = variant< typename Rules::value_type... >;
      32              :     @endcode
      33              : 
      34              :     @par Example
      35              :     Rules are used with the function @ref parse.
      36              :     @code
      37              :     // request-target = origin-form
      38              :     //                / absolute-form
      39              :     //                / authority-form
      40              :     //                / asterisk-form
      41              : 
      42              :     system::result< variant< url_view, url_view, authority_view, core::string_view > > rv = grammar::parse(
      43              :         "/index.html?width=full",
      44              :         variant_rule(
      45              :             origin_form_rule,
      46              :             absolute_uri_rule,
      47              :             authority_rule,
      48              :             delim_rule('*') ) );
      49              :     @endcode
      50              : 
      51              :     @par BNF
      52              :     @code
      53              :     variant     = rule1 / rule2 / rule3...
      54              :     @endcode
      55              : 
      56              :     @par Specification
      57              :     @li <a href="https://datatracker.ietf.org/doc/html/rfc5234#section-3.2"
      58              :         >3.2.  Alternatives (rfc5234)</a>
      59              :     @li <a href="https://datatracker.ietf.org/doc/html/rfc7230#section-5.3"
      60              :         >5.3.  Request Target (rfc7230)</a>
      61              : 
      62              :     @see
      63              :         @ref absolute_uri_rule,
      64              :         @ref authority_rule,
      65              :         @ref delim_rule,
      66              :         @ref parse,
      67              :         @ref origin_form_rule,
      68              :         @ref url_view.
      69              : */
      70              : #ifdef BOOST_URL_DOCS
      71              : template<class... Rules>
      72              : constexpr
      73              : __implementation_defined__
      74              : variant_rule( Rules... rn ) noexcept;
      75              : #else
      76              : template<
      77              :     class R0, class... Rn>
      78              : class variant_rule_t
      79              : {
      80              : public:
      81              :     using value_type = variant<
      82              :         typename R0::value_type,
      83              :         typename Rn::value_type...>;
      84              : 
      85              :     auto
      86              :     parse(
      87              :         char const*& it,
      88              :         char const* end) const ->
      89              :             system::result<value_type>;
      90              : 
      91              :     template<
      92              :         class R0_,
      93              :         class... Rn_>
      94              :     friend
      95              :     constexpr
      96              :     auto
      97              :     variant_rule(
      98              :         R0_ const& r0,
      99              :         Rn_ const&... rn) noexcept ->
     100              :             variant_rule_t<R0_, Rn_...>;
     101              : 
     102              : private:
     103              :     constexpr
     104         2495 :     variant_rule_t(
     105              :         R0 const& r0,
     106              :         Rn const&... rn) noexcept
     107         2495 :         : rn_(r0, rn...)
     108              :     {
     109         2495 :     }
     110              : 
     111              :     detail::tuple<R0, Rn...> rn_;
     112              : };
     113              : 
     114              : template<
     115              :     class R0,
     116              :     class... Rn>
     117              : constexpr
     118              : auto
     119              : variant_rule(
     120              :     R0 const& r0,
     121              :     Rn const&... rn) noexcept ->
     122              :         variant_rule_t<R0, Rn...>;
     123              : #endif
     124              : 
     125              : } // grammar
     126              : } // urls
     127              : } // boost
     128              : 
     129              : #include <boost/url/grammar/impl/variant_rule.hpp>
     130              : 
     131              : #endif
        

Generated by: LCOV version 2.1