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