BDE 4.39.x Production Release
Loading...
Searching...
No Matches
bslstl_ranges.h
Go to the documentation of this file.
1/// @file bslstl_ranges.h
2///
3/// The content of this file has been pre-processed for Doxygen.
4///
5
6
7// bslstl_ranges.h -*-C++-*-
8#ifndef INCLUDED_BSLSTL_RANGES
9#define INCLUDED_BSLSTL_RANGES
10
11#include <bsls_ident.h>
12BSLS_IDENT("$Id: $")
13
14/// @defgroup bslstl_ranges bslstl_ranges
15/// @brief Provide functionality of the corresponding C++ Standard header.
16/// @addtogroup bsl
17/// @{
18/// @addtogroup bslstl
19/// @{
20/// @addtogroup bslstl_ranges
21/// @{
22///
23/// <h1> Outline </h1>
24/// * <a href="#bslstl_ranges-purpose"> Purpose</a>
25/// * <a href="#bslstl_ranges-canonical-header"> Canonical Header </a>
26/// * <a href="#bslstl_ranges-description"> Description </a>
27///
28/// # Purpose {#bslstl_ranges-purpose}
29/// Provide functionality of the corresponding C++ Standard header.
30///
31/// # Canonical Header {#bslstl_ranges-canonical-header}
32/// bsl_ranges.h
33///
34/// # Description {#bslstl_ranges-description}
35/// Provide types, in the `bsl` namespace, equivalent to those
36/// defined in the corresponding C++ standard header. Include the native
37/// compiler-provided standard header, and also directly include Bloomberg's
38/// implementation of the C++ standard type (if one exists). Finally, place the
39/// included symbols from the `std` namespace (if any) into the `bsl` namespace.
40/// @}
41/** @} */
42/** @} */
43
44/** @addtogroup bsl
45 * @{
46 */
47/** @addtogroup bslstl
48 * @{
49 */
50/** @addtogroup bslstl_ranges
51 * @{
52 */
53
54#include <bslstl_iterator.h>
55
56#include <bslma_bslallocator.h>
57
59#include <bsls_keyword.h>
61
62#ifdef BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES
63
64#if !defined(BSLS_LIBRARYFEATURES_STDCPP_LLVM) || _LIBCPP_VERSION > 179999
65 #define BSL_RANGES_HAS_JOIN_VIEW 1
66#endif
67
68#include <ranges>
69
70namespace bsl {
71
72namespace ranges {
73
74 // Range access (defined in `bststl_iterator.h`)
75 //using std::ranges::begin;
76 //using std::ranges::end;
77 //using std::ranges::cbegin;
78 //using std::ranges::cend;
79 //using std::ranges::rbegin;
80 //using std::ranges::rend;
81 //using std::ranges::crbegin;
82 //using std::ranges::crend;
83 //using std::ranges::size;
84 //using std::ranges::ssize;
85 //using std::ranges::empty;
86 //using std::ranges::data;
87 //using std::ranges::cdata;
88
89 // Range primitives
90 using std::ranges::iterator_t;
91 using std::ranges::sentinel_t;
92 using std::ranges::range_size_t;
93 using std::ranges::range_difference_t;
94 using std::ranges::range_value_t;
95 using std::ranges::range_reference_t;
96 using std::ranges::range_rvalue_reference_t;
97
98 // Not yet added
99 // https://cplusplus.github.io/LWG/issue386
100 // using std::ranges::range_common_reference_t;
101
102 // Range concepts
103 using std::ranges::range;
104 using std::ranges::borrowed_range;
105 using std::ranges::enable_borrowed_range;
106 using std::ranges::sized_range;
107 using std::ranges::disable_sized_range;
108 using std::ranges::view;
109 using std::ranges::enable_view;
110 using std::ranges::view_base;
111
112 using std::ranges::input_range;
113 using std::ranges::output_range;
114 using std::ranges::forward_range;
115 using std::ranges::bidirectional_range;
116 using std::ranges::random_access_range;
117 using std::ranges::contiguous_range;
118 using std::ranges::common_range;
119 using std::ranges::viewable_range;
120
121 // Views
122 using std::ranges::view_interface;
123 using std::ranges::subrange;
124
125 // Dangling iterator handling
126 using std::ranges::dangling;
127 using std::ranges::borrowed_iterator_t;
128 using std::ranges::borrowed_subrange_t;
129
130 // Factories
131 using std::ranges::empty_view;
132 using std::ranges::single_view;
133 using std::ranges::iota_view;
134 using std::ranges::basic_istream_view;
135 using std::ranges::istream_view;
136 using std::ranges::wistream_view;
137
138namespace views {
139
140 using std::ranges::views::empty;
141 using std::ranges::views::single;
142 using std::ranges::views::iota;
143 using std::ranges::views::istream;
144
145} // close namespace views
146
147 // Adaptors
148 using std::ranges::ref_view;
149 using std::ranges::owning_view;
150 using std::ranges::filter_view;
151 using std::ranges::transform_view;
152 using std::ranges::take_view;
153 using std::ranges::take_while_view;
154 using std::ranges::drop_view;
155 using std::ranges::drop_while_view;
156#if BSL_RANGES_HAS_JOIN_VIEW
157 using std::ranges::join_view;
158#endif
159 using std::ranges::lazy_split_view;
160 using std::ranges::split_view;
161 using std::ranges::common_view;
162 using std::ranges::reverse_view;
163 using std::ranges::elements_view;
164 using std::ranges::keys_view;
165 using std::ranges::values_view;
166
167namespace views {
168
169 using std::ranges::views::all_t;
170 using std::ranges::views::all;
171 using std::ranges::views::counted;
172 using std::ranges::views::filter;
173 using std::ranges::views::transform;
174 using std::ranges::views::take;
175 using std::ranges::views::take_while;
176 using std::ranges::views::drop;
177 using std::ranges::views::drop_while;
178#if BSL_RANGES_HAS_JOIN_VIEW
179 using std::ranges::views::join;
180#endif
181 using std::ranges::views::lazy_split;
182 using std::ranges::views::split;
183 using std::ranges::views::common;
184 using std::ranges::views::reverse;
185 using std::ranges::views::elements;
186 using std::ranges::views::keys;
187 using std::ranges::views::values;
188
189} // close namespace views
190
191 // Enumerations
192 using std::ranges::subrange_kind;
193
194#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_BASELINE_LIBRARY
195 using std::ranges::as_rvalue_view;
196 using std::ranges::chunk_by_view;
197 using std::ranges::repeat_view;
198 namespace views {
199 using std::views::as_rvalue;
200 using std::views::chunk_by;
201 using std::views::repeat;
202 }
203#endif
204
205#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_TO_CONTAINER
206 using std::ranges::to;
207#endif
208
209#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_RANGE_ADAPTOR_CLOSURE
210 using std::ranges::range_adaptor_closure;
211#endif
212
213#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_AS_CONST
214 using std::ranges::const_iterator_t;
215 using std::ranges::const_sentinel_t;
216 using std::ranges::range_const_reference_t;
217 using std::ranges::constant_range;
218 using std::ranges::as_const_view;
219 namespace views {
220 using std::views::as_const;
221 }
222#endif
223
224#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_CARTESIAN_PRODUCT
225 using std::ranges::cartesian_product_view;
226 namespace views {
227 using std::views::cartesian_product;
228 }
229#endif
230
231#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_CHUNK
232 using std::ranges::chunk_view;
233 namespace views {
234 using std::views::chunk;
235 }
236#endif
237
238#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_ENUMERATE
239 using std::ranges::enumerate_view;
240 namespace views {
241 using std::views::enumerate;
242 }
243#endif
244
245#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_JOIN_WITH
246 using std::ranges::join_with_view;
247 namespace views {
248 using std::views::join_with;
249 }
250#endif
251
252#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_SLIDE
253 using std::ranges::slide_view;
254 namespace views {
255 using std::views::slide;
256 }
257#endif
258
259#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_STRIDE
260 using std::ranges::stride_view;
261 namespace views {
262 using std::views::stride;
263 }
264#endif
265
266#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_RANGES_ZIP
267 using std::ranges::adjacent_view;
268 using std::ranges::adjacent_transform_view;
269 using std::ranges::zip_view;
270 using std::ranges::zip_transform_view;
271 namespace views {
272 using std::views::adjacent;
273 using std::views::adjacent_transform;
274 using std::views::zip;
275 using std::views::zip_transform;
276 }
277#endif
278
279#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_GENERATOR
280 template<ranges::range R, class Alloc = bsl::allocator<>>
281 using elements_of = std::ranges::elements_of<R, Alloc>;
282#endif
283
284} // close namespace ranges
285
286#ifdef BSLS_LIBRARYFEATURES_HAS_CPP23_CONTAINERS_RANGES
287using std::from_range;
288using std::from_range_t;
289#endif
290
291 // Namespace alias
292 namespace views = ranges::views;
293
294} // close package namespace
295
296#endif // BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES
297
298#ifndef BSLS_LIBRARYFEATURES_HAS_CPP23_CONTAINERS_RANGES
299namespace bsl {
300
302#ifdef BSLS_COMPILERFEATURES_SUPPORT_DEFAULTED_FUNCTIONS
303 explicit from_range_t() = default;
304#endif
305};
306
307#ifdef BSLS_COMPILERFEATURES_SUPPORT_INLINE_VARIABLES
308inline constexpr from_range_t from_range = from_range_t();
309#else
310extern const from_range_t from_range;
311#endif
312
313} // close package namespace
314#endif // BSLS_LIBRARYFEATURES_HAS_CPP23_CONTAINERS_RANGES
315
316#endif
317
318// ----------------------------------------------------------------------------
319// Copyright 2025 Bloomberg Finance L.P.
320//
321// Licensed under the Apache License, Version 2.0 (the "License");
322// you may not use this file except in compliance with the License.
323// You may obtain a copy of the License at
324//
325// http://www.apache.org/licenses/LICENSE-2.0
326//
327// Unless required by applicable law or agreed to in writing, software
328// distributed under the License is distributed on an "AS IS" BASIS,
329// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
330// See the License for the specific language governing permissions and
331// limitations under the License.
332// ----------------------------- END-OF-FILE ----------------------------------
333
334/** @} */
335/** @} */
336/** @} */
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlat_valuetypefunctions.h:939
const from_range_t from_range
Definition bslstl_ranges.h:301