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
|