100.00% Lines (18/18) 100.00% Functions (1/1)
TLA Baseline Branch
Line Hits Code Line Hits Code
1   // 1   //
2   // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com) 2   // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
3   // Copyright (c) 2023 Alan de Freitas (alandefreitas@gmail.com) 3   // Copyright (c) 2023 Alan de Freitas (alandefreitas@gmail.com)
4   // 4   //
5   // Distributed under the Boost Software License, Version 1.0. (See accompanying 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) 6   // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7   // 7   //
8   // Official repository: https://github.com/boostorg/url 8   // Official repository: https://github.com/boostorg/url
9   // 9   //
10   10  
11   #ifndef BOOST_URL_RFC_DETAIL_IMPL_IPVFUTURE_RULE_HPP 11   #ifndef BOOST_URL_RFC_DETAIL_IMPL_IPVFUTURE_RULE_HPP
12   #define BOOST_URL_RFC_DETAIL_IMPL_IPVFUTURE_RULE_HPP 12   #define BOOST_URL_RFC_DETAIL_IMPL_IPVFUTURE_RULE_HPP
13   13  
14   #include <boost/url/detail/config.hpp> 14   #include <boost/url/detail/config.hpp>
15   #include <boost/url/rfc/detail/charsets.hpp> 15   #include <boost/url/rfc/detail/charsets.hpp>
16   #include <boost/url/grammar/charset.hpp> 16   #include <boost/url/grammar/charset.hpp>
17   #include <boost/url/grammar/delim_rule.hpp> 17   #include <boost/url/grammar/delim_rule.hpp>
18   #include <boost/url/grammar/error.hpp> 18   #include <boost/url/grammar/error.hpp>
19   #include <boost/url/grammar/hexdig_chars.hpp> 19   #include <boost/url/grammar/hexdig_chars.hpp>
20   #include <boost/url/grammar/parse.hpp> 20   #include <boost/url/grammar/parse.hpp>
21   #include <boost/url/grammar/token_rule.hpp> 21   #include <boost/url/grammar/token_rule.hpp>
22   #include <boost/url/grammar/tuple_rule.hpp> 22   #include <boost/url/grammar/tuple_rule.hpp>
23   23  
24   namespace boost { 24   namespace boost {
25   namespace urls { 25   namespace urls {
26   namespace detail { 26   namespace detail {
27   27  
28   BOOST_URL_CXX20_CONSTEXPR_OR_INLINE 28   BOOST_URL_CXX20_CONSTEXPR_OR_INLINE
29   auto 29   auto
HITCBC 30   22 ipvfuture_rule_t:: 30   22 ipvfuture_rule_t::
31   parse( 31   parse(
32   char const*& it, 32   char const*& it,
33   char const* const end 33   char const* const end
34   ) const noexcept -> 34   ) const noexcept ->
35   system::result<value_type> 35   system::result<value_type>
36   { 36   {
37   constexpr auto 37   constexpr auto
HITCBC 38   22 minor_chars = 38   22 minor_chars =
39   unreserved_chars + 39   unreserved_chars +
40   sub_delim_chars + ':'; 40   sub_delim_chars + ':';
HITCBC 41   22 auto const it0 = it; 41   22 auto const it0 = it;
42   auto rv = grammar::parse( 42   auto rv = grammar::parse(
43   it, end, 43   it, end,
HITCBC 44   22 grammar::tuple_rule( 44   22 grammar::tuple_rule(
HITCBC 45   22 grammar::delim_rule('v'), 45   22 grammar::delim_rule('v'),
HITCBC 46   22 grammar::token_rule( 46   22 grammar::token_rule(
47   grammar::hexdig_chars), 47   grammar::hexdig_chars),
HITCBC 48   22 grammar::delim_rule('.'), 48   22 grammar::delim_rule('.'),
HITCBC 49   44 grammar::token_rule(minor_chars))); 49   44 grammar::token_rule(minor_chars)));
HITCBC 50   22 if(! rv) 50   22 if(! rv)
HITCBC 51   7 return rv.error(); 51   7 return rv.error();
HITCBC 52   15 value_type t; 52   15 value_type t;
HITCBC 53   15 t.major = std::get<0>(*rv); 53   15 t.major = std::get<0>(*rv);
HITCBC 54   15 t.minor = std::get<1>(*rv); 54   15 t.minor = std::get<1>(*rv);
55   // token_rule guarantees non-empty tokens, 55   // token_rule guarantees non-empty tokens,
56   // so major/minor are always non-empty here. 56   // so major/minor are always non-empty here.
HITCBC 57   15 BOOST_ASSERT(!t.major.empty()); 57   15 BOOST_ASSERT(!t.major.empty());
HITCBC 58   15 BOOST_ASSERT(!t.minor.empty()); 58   15 BOOST_ASSERT(!t.minor.empty());
HITCBC 59   30 t.str = core::string_view( 59   30 t.str = core::string_view(
HITCBC 60   15 it0, it - it0); 60   15 it0, it - it0);
HITCBC 61   15 return t; 61   15 return t;
62   } 62   }
63   63  
64   } // detail 64   } // detail
65   } // urls 65   } // urls
66   } // boost 66   } // boost
67   67  
68   68  
69   #endif 69   #endif