1// -*- C++ -*-
2//===----------------------------------------------------------------------===//
3//
4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5// See https://llvm.org/LICENSE.txt for license information.
6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7//
8//===----------------------------------------------------------------------===//
9
10export namespace std {
11  namespace ranges {
12    inline namespace __cpo {
13      // [range.access], range access
14      using std::ranges::__cpo::begin;
15      using std::ranges::__cpo::cbegin;
16      using std::ranges::__cpo::cend;
17      using std::ranges::__cpo::crbegin;
18      using std::ranges::__cpo::crend;
19      using std::ranges::__cpo::end;
20      using std::ranges::__cpo::rbegin;
21      using std::ranges::__cpo::rend;
22
23      using std::ranges::__cpo::cdata;
24      using std::ranges::__cpo::data;
25      using std::ranges::__cpo::empty;
26      using std::ranges::__cpo::size;
27      using std::ranges::__cpo::ssize;
28    } // namespace __cpo
29
30    // [range.range], ranges
31    using std::ranges::range;
32
33    using std::ranges::enable_borrowed_range;
34
35    using std::ranges::borrowed_range;
36
37    // using std::ranges::const_iterator_t;
38    // using std::ranges::const_sentinel_t;
39    using std::ranges::iterator_t;
40    // using std::ranges::range_const_reference_t;
41    using std::ranges::range_common_reference_t;
42    using std::ranges::range_difference_t;
43    using std::ranges::range_reference_t;
44    using std::ranges::range_rvalue_reference_t;
45    using std::ranges::range_size_t;
46    using std::ranges::range_value_t;
47    using std::ranges::sentinel_t;
48
49    // [range.sized], sized ranges
50    using std::ranges::disable_sized_range;
51    using std::ranges::sized_range;
52
53    // [range.view], views
54    using std::ranges::enable_view;
55    using std::ranges::view;
56    using std::ranges::view_base;
57
58    // [range.refinements], other range refinements
59    using std::ranges::bidirectional_range;
60    using std::ranges::common_range;
61    // using std::ranges::constant_range;
62    using std::ranges::contiguous_range;
63    using std::ranges::forward_range;
64    using std::ranges::input_range;
65    using std::ranges::output_range;
66    using std::ranges::random_access_range;
67    using std::ranges::viewable_range;
68
69    // [view.interface], class template view_interface
70    using std::ranges::view_interface;
71
72    // [range.subrange], sub-ranges
73    using std::ranges::subrange;
74    using std::ranges::subrange_kind;
75
76    using std::ranges::get;
77  } // namespace ranges
78
79  using std::ranges::get;
80
81  namespace ranges {
82
83    // [range.dangling], dangling iterator handling
84    using std::ranges::dangling;
85
86    // [range.elementsof], class template elements_of
87    // using std::ranges::elements_of;
88
89    using std::ranges::borrowed_iterator_t;
90
91    using std::ranges::borrowed_subrange_t;
92
93#if _LIBCPP_STD_VER >= 23
94    // [range.utility.conv], range conversions
95    using std::ranges::to;
96#endif
97
98    // [range.empty], empty view
99    using std::ranges::empty_view;
100
101    namespace views {
102      using std::ranges::views::empty;
103    }
104
105    // [range.single], single view
106    using std::ranges::single_view;
107
108    namespace views {
109      using std::ranges::views::single;
110    } // namespace views
111
112    // [range.iota], iota view
113    using std::ranges::iota_view;
114
115    namespace views {
116      using std::ranges::views::iota;
117    } // namespace views
118
119#if _LIBCPP_STD_VER >= 23
120    // [range.repeat], repeat view
121    using std::ranges::repeat_view;
122
123    namespace views {
124      using std::ranges::views::repeat;
125    } // namespace views
126#endif // _LIBCPP_STD_VER >= 23
127
128#ifndef _LIBCPP_HAS_NO_LOCALIZATION
129    // [range.istream], istream view
130    using std::ranges::basic_istream_view;
131    using std::ranges::istream_view;
132#  ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
133    using std::ranges::wistream_view;
134#  endif
135
136    namespace views {
137      using std::ranges::views::istream;
138    }
139#endif // _LIBCPP_HAS_NO_LOCALIZATION
140
141    // [range.adaptor.object], range adaptor objects
142    // using std::ranges::range_adaptor_closure;
143
144    // [range.all], all view
145    namespace views {
146      using std::ranges::views::all;
147      using std::ranges::views::all_t;
148    } // namespace views
149
150    // [range.ref.view], ref view
151    using std::ranges::ref_view;
152
153    // [range.owning.view], owning view
154    using std::ranges::owning_view;
155
156#if _LIBCPP_STD_VER >= 23
157    // [range.as.rvalue], as rvalue view
158    using std::ranges::as_rvalue_view;
159
160    namespace views {
161      using std::ranges::views::as_rvalue;
162    } // namespace views
163#endif // _LIBCPP_STD_VER >= 23
164
165    // [range.filter], filter view
166    using std::ranges::filter_view;
167
168    namespace views {
169      using std::ranges::views::filter;
170    } // namespace views
171
172    // [range.transform], transform view
173    using std::ranges::transform_view;
174
175    namespace views {
176      using std::ranges::views::transform;
177    } // namespace views
178
179    // [range.take], take view
180    using std::ranges::take_view;
181
182    namespace views {
183      using std::ranges::views::take;
184    } // namespace views
185
186    // [range.take.while], take while view
187    using std::ranges::take_while_view;
188
189    namespace views {
190      using std::ranges::views::take_while;
191    } // namespace views
192
193    // [range.drop], drop view
194    using std::ranges::drop_view;
195
196    namespace views {
197      using std::ranges::views::drop;
198    } // namespace views
199
200    // [range.drop.while], drop while view
201    using std::ranges::drop_while_view;
202
203    namespace views {
204      using std::ranges::views::drop_while;
205    } // namespace views
206
207    using std::ranges::join_view;
208
209    namespace views {
210      using std::ranges::views::join;
211    } // namespace views
212#if 0
213    using std::ranges::join_with_view;
214
215    namespace views {
216      using std::ranges::views::join_with;
217    } // namespace views
218#endif
219    using std::ranges::lazy_split_view;
220
221    // [range.split], split view
222    using std::ranges::split_view;
223
224    namespace views {
225      using std::ranges::views::lazy_split;
226      using std::ranges::views::split;
227    } // namespace views
228
229    // [range.counted], counted view
230    namespace views {
231      using std::ranges::views::counted;
232    } // namespace views
233
234    // [range.common], common view
235    using std::ranges::common_view;
236
237    namespace views {
238      using std::ranges::views::common;
239    } // namespace views
240
241    // [range.reverse], reverse view
242    using std::ranges::reverse_view;
243
244    namespace views {
245      using std::ranges::views::reverse;
246    } // namespace views
247
248    // [range.as.const], as const view
249#if 0
250    using std::ranges::as_const_view;
251
252    namespace views {
253      using std::ranges::views::as_const;
254    } // namespace views
255#endif
256    // [range.elements], elements view
257    using std::ranges::elements_view;
258
259    using std::ranges::keys_view;
260    using std::ranges::values_view;
261
262    namespace views {
263      using std::ranges::views::elements;
264      using std::ranges::views::keys;
265      using std::ranges::views::values;
266    } // namespace views
267
268#if _LIBCPP_STD_VER >= 23
269    // [range.zip], zip view
270    using std::ranges::zip_view;
271
272    namespace views {
273      using std::ranges::views::zip;
274    } // namespace views
275#endif // _LIBCPP_STD_VER >= 23
276
277#if 0
278    // [range.zip.transform], zip transform view
279    using std::ranges::zip_transform_view;
280
281    namespace views {
282      using std::ranges::views::zip_transform;
283    }
284
285    using std::ranges::adjacent_view;
286
287    namespace views {
288      using std::ranges::views::adjacent;
289      using std::ranges::views::pairwise;
290    } // namespace views
291
292    using std::ranges::adjacent_transform_view;
293
294    namespace views {
295      using std::ranges::views::adjacent_transform;
296      using std::ranges::views::pairwise_transform;
297    } // namespace views
298
299    using std::ranges::chunk_view;
300
301    using std::ranges::chunk_view<V>;
302
303    namespace views {
304      using std::ranges::views::chunk;
305    }
306
307    using std::ranges::slide_view;
308
309    namespace views {
310      using std::ranges::views::slide;
311    }
312#endif
313
314#if _LIBCPP_STD_VER >= 23
315    // [range.chunk.by], chunk by view
316    using std::ranges::chunk_by_view;
317
318    namespace views {
319      using std::ranges::views::chunk_by;
320    }
321#endif // _LIBCPP_STD_VER >= 23
322
323#if 0
324    // [range.stride], stride view
325    using std::ranges::stride_view;
326
327    namespace views {
328      using std::ranges::views::stride;
329    }
330
331    using std::ranges::cartesian_product_view;
332
333    namespace views {
334      using std::ranges::views::cartesian_product;
335    }
336#endif
337  } // namespace ranges
338
339  namespace views = ranges::views;
340
341  using std::tuple_element;
342  using std::tuple_size;
343
344#if _LIBCPP_STD_VER >= 23
345  using std::from_range;
346  using std::from_range_t;
347#endif // _LIBCPP_STD_VER >= 23
348} // namespace std
349