Line data Source code
1 : //
2 : // Copyright (c) 2025 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/cppalliance/buffers
8 : //
9 :
10 : #include <boost/buffers/any_buffers.hpp>
11 : #include <boost/buffers/detail/except.hpp>
12 :
13 : namespace boost {
14 : namespace buffers {
15 :
16 : template<>
17 2 : any_buffers<true>::
18 2 : any_buffers() noexcept
19 : {
20 : struct impl : any_impl
21 : {
22 1 : bool is_small_buffers() const noexcept override
23 : {
24 1 : return true;
25 : }
26 :
27 1 : bool is_small_iter() const noexcept override
28 : {
29 1 : return true;
30 : }
31 :
32 19 : void copy(
33 : any_buffers& dest,
34 : std::shared_ptr<any_impl const> const& sp) const override
35 : {
36 19 : dest.sp_ = sp;
37 19 : }
38 :
39 393 : void it_copy(void*, void const*) const override
40 : {
41 393 : }
42 :
43 452 : void it_destroy(void*) const override
44 : {
45 452 : }
46 :
47 1 : void inc(void*) const override
48 : {
49 1 : }
50 :
51 1 : void dec(void*) const override
52 : {
53 1 : }
54 :
55 3 : value_type deref(void const*) const override
56 : {
57 3 : return {};
58 : }
59 :
60 123 : bool equal(void const*, void const*) const override
61 : {
62 123 : return true;
63 : }
64 :
65 30 : void begin(void*) const override
66 : {
67 30 : }
68 :
69 29 : void end(void*) const override
70 : {
71 29 : }
72 : };
73 :
74 2 : static impl const instance;
75 4 : sp_ = std::shared_ptr<any_impl const>(
76 2 : &instance, null_deleter{} );
77 2 : }
78 :
79 : template<>
80 3 : any_buffers<false>::
81 3 : any_buffers() noexcept
82 : {
83 : struct impl : any_impl
84 : {
85 2 : bool is_small_buffers() const noexcept override
86 : {
87 2 : return true;
88 : }
89 :
90 2 : bool is_small_iter() const noexcept override
91 : {
92 2 : return true;
93 : }
94 :
95 37 : void copy(
96 : any_buffers& dest,
97 : std::shared_ptr<any_impl const> const& sp) const override
98 : {
99 37 : dest.sp_ = sp;
100 37 : }
101 :
102 393 : void it_copy(void*, void const*) const override
103 : {
104 393 : }
105 :
106 490 : void it_destroy(void*) const override
107 : {
108 490 : }
109 :
110 1 : void inc(void*) const override
111 : {
112 1 : }
113 :
114 1 : void dec(void*) const override
115 : {
116 1 : }
117 :
118 3 : value_type deref(void const*) const override
119 : {
120 3 : return {};
121 : }
122 :
123 142 : bool equal(void const*, void const*) const override
124 : {
125 142 : return true;
126 : }
127 :
128 49 : void begin(void*) const override
129 : {
130 49 : }
131 :
132 48 : void end(void*) const override
133 : {
134 48 : }
135 : };
136 :
137 3 : static impl const instance;
138 6 : sp_ = std::shared_ptr<any_impl const>(
139 3 : &instance, null_deleter{} );
140 3 : }
141 :
142 : template<>
143 0 : any_buffers<true>::
144 : any_buffers::
145 : const_iterator::
146 0 : const_iterator() noexcept
147 0 : : sp_(any_buffers<true>().begin().sp_)
148 : {
149 0 : }
150 :
151 : template<>
152 0 : any_buffers<false>::
153 : any_buffers::
154 : const_iterator::
155 0 : const_iterator() noexcept
156 0 : : sp_(any_buffers<false>().begin().sp_)
157 : {
158 0 : }
159 :
160 : } // buffers
161 : } // boost
|