Line data Source code
1 : // 2 : // Copyright (c) 2023 Alan de Freitas (alandefreitas@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 : #include "../matches.hpp" 11 : 12 : namespace boost { 13 : namespace urls { 14 : 15 : auto 16 196 : matches_base:: 17 : at( size_type pos ) const 18 : -> const_reference 19 : { 20 196 : if (pos < size()) 21 : { 22 120 : return matches()[pos]; 23 : } 24 76 : boost::throw_exception( 25 152 : std::out_of_range("")); 26 : } 27 : 28 : auto 29 120 : matches_base:: 30 : operator[]( size_type pos ) const 31 : -> const_reference 32 : { 33 120 : BOOST_ASSERT(pos < size()); 34 120 : return matches()[pos]; 35 : } 36 : 37 : auto 38 312 : matches_base:: 39 : at( core::string_view id ) const 40 : -> const_reference 41 : { 42 564 : for (std::size_t i = 0; i < size(); ++i) 43 : { 44 488 : if (ids()[i] == id) 45 236 : return matches()[i]; 46 : } 47 76 : boost::throw_exception( 48 152 : std::out_of_range("")); 49 : } 50 : 51 : auto 52 118 : matches_base:: 53 : operator[]( core::string_view id ) const 54 : -> const_reference 55 : { 56 118 : return at(id); 57 : } 58 : 59 : auto 60 194 : matches_base:: 61 : find( core::string_view id ) const 62 : -> const_iterator 63 : { 64 380 : for (std::size_t i = 0; i < size(); ++i) 65 : { 66 304 : if (ids()[i] == id) 67 118 : return matches() + i; 68 : } 69 76 : return matches() + size(); 70 : } 71 : 72 : auto 73 76 : matches_base:: 74 : begin() const 75 : -> const_iterator 76 : { 77 76 : return &matches()[0]; 78 : } 79 : 80 : auto 81 270 : matches_base:: 82 : end() const 83 : -> const_iterator 84 : { 85 270 : return &matches()[size()]; 86 : } 87 : 88 : auto 89 76 : matches_base:: 90 : empty() const noexcept 91 : -> bool 92 : { 93 76 : return size() == 0; 94 : } 95 : 96 : } // urls 97 : } // boost 98 :