libs/url/src/rfc/ipv4_address_rule.cpp

100.0% Lines (13/13) 100.0% Functions (1/1) 100.0% Branches (2/2)
libs/url/src/rfc/ipv4_address_rule.cpp
Line Branch Hits Source Code
1 //
2 // Copyright (c) 2022 Vinnie Falco (vinnie.falco@gmail.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
11 #include <boost/url/detail/config.hpp>
12 #include <boost/url/rfc/ipv4_address_rule.hpp>
13 #include <boost/url/grammar/delim_rule.hpp>
14 #include <boost/url/grammar/dec_octet_rule.hpp>
15 #include <boost/url/grammar/parse.hpp>
16 #include <boost/url/grammar/tuple_rule.hpp>
17
18 namespace boost {
19 namespace urls {
20
21 auto
22 2002 implementation_defined::ipv4_address_rule_t::
23 parse(
24 char const*& it,
25 char const* end
26 ) const noexcept ->
27 system::result<value_type>
28 {
29 using namespace grammar;
30 auto rv = grammar::parse(
31 2002 it, end, tuple_rule(
32 2002 dec_octet_rule, squelch(delim_rule('.')),
33 2002 dec_octet_rule, squelch(delim_rule('.')),
34 2002 dec_octet_rule, squelch(delim_rule('.')),
35 2002 dec_octet_rule));
36
2/2
✓ Branch 1 taken 1885 times.
✓ Branch 2 taken 117 times.
2002 if(! rv)
37 1885 return rv.error();
38 std::array<unsigned char, 4> v;
39 117 v[0] = std::get<0>(*rv);
40 117 v[1] = std::get<1>(*rv);
41 117 v[2] = std::get<2>(*rv);
42 117 v[3] = std::get<3>(*rv);
43 117 return ipv4_address(v);
44 }
45
46 } // urls
47 } // boost
48
49