Line data Source code
1 : // 2 : // Copyright (c) 2022 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 : #ifndef BOOST_URL_DETAIL_ROUTER_HPP 11 : #define BOOST_URL_DETAIL_ROUTER_HPP 12 : 13 : #include <boost/url/pct_string_view.hpp> 14 : #include <boost/url/segments_encoded_view.hpp> 15 : #include <boost/url/grammar/delim_rule.hpp> 16 : #include <boost/url/grammar/optional_rule.hpp> 17 : #include <boost/url/grammar/range_rule.hpp> 18 : #include <boost/url/grammar/tuple_rule.hpp> 19 : #include <string> 20 : 21 : namespace boost { 22 : namespace urls { 23 : namespace detail { 24 : 25 : class router_base 26 : { 27 : void* impl_{nullptr}; 28 : 29 : public: 30 : // A type-erased router resource 31 : struct any_resource 32 : { 33 113 : virtual ~any_resource() = default; 34 : virtual void const* get() const noexcept = 0; 35 : }; 36 : 37 : protected: 38 : router_base(); 39 : 40 : virtual ~router_base(); 41 : 42 : void 43 : insert_impl( 44 : core::string_view s, 45 : any_resource const* v); 46 : 47 : any_resource const* 48 : find_impl( 49 : segments_encoded_view path, 50 : core::string_view*& matches, 51 : core::string_view*& names) const noexcept; 52 : }; 53 : 54 : } // detail 55 : } // urls 56 : } // boost 57 : 58 : #endif