Line data 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 : #ifndef BOOST_URL_GRAMMAR_DETAIL_RECYCLED_HPP
11 : #define BOOST_URL_GRAMMAR_DETAIL_RECYCLED_HPP
12 :
13 : #include <utility>
14 :
15 : namespace boost {
16 : namespace urls {
17 : namespace grammar {
18 : namespace detail {
19 :
20 : template<
21 : std::size_t Size,
22 : std::size_t Align>
23 : struct aligned_storage_impl
24 : {
25 22 : void* addr() noexcept
26 : {
27 22 : return buf_;
28 : }
29 :
30 : void const* addr() const noexcept
31 : {
32 : return buf_;
33 : }
34 :
35 : private:
36 : alignas(Align)
37 : unsigned char buf_[Size];
38 : };
39 :
40 : constexpr
41 : std::size_t
42 : nearest_pow2(
43 : std::size_t x,
44 : std::size_t f = 0) noexcept
45 : {
46 : return
47 : (f <= (std::size_t(-1)/2))
48 : ? ( x <= f
49 : ? f
50 : : nearest_pow2(x, 2 * f))
51 : : x;
52 : }
53 :
54 : //------------------------------------------------
55 :
56 : BOOST_URL_DECL
57 : void
58 : recycled_add_impl(
59 : std::size_t) noexcept;
60 :
61 : BOOST_URL_DECL
62 : void
63 : recycled_remove_impl(
64 : std::size_t) noexcept;
65 :
66 : #ifdef BOOST_URL_REPORT
67 :
68 : inline
69 : void
70 : recycled_add(
71 : std::size_t n) noexcept
72 : {
73 : recycled_add_impl(n);
74 : }
75 :
76 : inline
77 : void
78 : recycled_remove(
79 : std::size_t n) noexcept
80 : {
81 : recycled_remove_impl(n);
82 : }
83 :
84 : #else
85 :
86 8 : inline void recycled_add(
87 : std::size_t) noexcept
88 : {
89 8 : }
90 8 : inline void recycled_remove(
91 : std::size_t) noexcept
92 : {
93 8 : }
94 :
95 : #endif
96 :
97 : } // detail
98 : } // grammar
99 : } // urls
100 : } // boost
101 :
102 : #endif
|