xref: /netbsd-src/external/apache2/llvm/dist/libcxx/include/ranges (revision 4d6fc14bc9b0c5bf3e30be318c143ee82cadd108)
1*4d6fc14bSjoerg// -*- C++ -*-
2*4d6fc14bSjoerg//===--------------------------- ranges -----------------------------------===//
3*4d6fc14bSjoerg//
4*4d6fc14bSjoerg// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*4d6fc14bSjoerg// See https://llvm.org/LICENSE.txt for license information.
6*4d6fc14bSjoerg// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7*4d6fc14bSjoerg//
8*4d6fc14bSjoerg//===----------------------------------------------------------------------===//
9*4d6fc14bSjoerg
10*4d6fc14bSjoerg#ifndef _LIBCPP_RANGES
11*4d6fc14bSjoerg#define _LIBCPP_RANGES
12*4d6fc14bSjoerg
13*4d6fc14bSjoerg/*
14*4d6fc14bSjoerg
15*4d6fc14bSjoerg#include <compare>              // see [compare.syn]
16*4d6fc14bSjoerg#include <initializer_list>     // see [initializer.list.syn]
17*4d6fc14bSjoerg#include <iterator>             // see [iterator.synopsis]
18*4d6fc14bSjoerg
19*4d6fc14bSjoergnamespace std::ranges {
20*4d6fc14bSjoerg  inline namespace unspecified {
21*4d6fc14bSjoerg    // [range.access], range access
22*4d6fc14bSjoerg    inline constexpr unspecified begin = unspecified;
23*4d6fc14bSjoerg    inline constexpr unspecified end = unspecified;
24*4d6fc14bSjoerg    inline constexpr unspecified cbegin = unspecified;
25*4d6fc14bSjoerg    inline constexpr unspecified cend = unspecified;
26*4d6fc14bSjoerg
27*4d6fc14bSjoerg    inline constexpr unspecified size = unspecified;
28*4d6fc14bSjoerg    inline constexpr unspecified ssize = unspecified;
29*4d6fc14bSjoerg  }
30*4d6fc14bSjoerg
31*4d6fc14bSjoerg  // [range.range], ranges
32*4d6fc14bSjoerg  template<class T>
33*4d6fc14bSjoerg    concept range = see below;
34*4d6fc14bSjoerg
35*4d6fc14bSjoerg  template<class T>
36*4d6fc14bSjoerg    inline constexpr bool enable_borrowed_range = false;
37*4d6fc14bSjoerg
38*4d6fc14bSjoerg  template<class T>
39*4d6fc14bSjoerg    using iterator_t = decltype(ranges::begin(declval<T&>()));
40*4d6fc14bSjoerg  template<class T>
41*4d6fc14bSjoerg    using iterator_t = decltype(ranges::begin(declval<T&>()));
42*4d6fc14bSjoerg  template<range R>
43*4d6fc14bSjoerg    using sentinel_t = decltype(ranges::end(declval<R&>()));
44*4d6fc14bSjoerg  template<range R>
45*4d6fc14bSjoerg    using range_difference_t = iter_difference_t<iterator_t<R>>;
46*4d6fc14bSjoerg  template<range R>
47*4d6fc14bSjoerg    using range_value_t = iter_value_t<iterator_t<R>>;
48*4d6fc14bSjoerg  template<range R>
49*4d6fc14bSjoerg    using range_reference_t = iter_reference_t<iterator_t<R>>;
50*4d6fc14bSjoerg  template<range R>
51*4d6fc14bSjoerg    using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<R>>;
52*4d6fc14bSjoerg
53*4d6fc14bSjoerg  // [range.sized]
54*4d6fc14bSjoerg  template<class>
55*4d6fc14bSjoerg    inline constexpr bool disable_sized_range = false;
56*4d6fc14bSjoerg
57*4d6fc14bSjoerg  template<class T>
58*4d6fc14bSjoerg    concept sized_range = ...;
59*4d6fc14bSjoerg
60*4d6fc14bSjoerg  // [range.view], views
61*4d6fc14bSjoerg  template<class T>
62*4d6fc14bSjoerg    inline constexpr bool enable_view = ...;
63*4d6fc14bSjoerg
64*4d6fc14bSjoerg  struct view_base { };
65*4d6fc14bSjoerg
66*4d6fc14bSjoerg  template<class T>
67*4d6fc14bSjoerg    concept view = ...;
68*4d6fc14bSjoerg
69*4d6fc14bSjoerg  // [range.refinements], other range refinements
70*4d6fc14bSjoerg  template<class T>
71*4d6fc14bSjoerg    concept input_range = see below;
72*4d6fc14bSjoerg
73*4d6fc14bSjoerg  template<class T>
74*4d6fc14bSjoerg    concept forward_range = see below;
75*4d6fc14bSjoerg
76*4d6fc14bSjoerg  template<class T>
77*4d6fc14bSjoerg  concept bidirectional_range = see below;
78*4d6fc14bSjoerg
79*4d6fc14bSjoerg  template <class _Tp>
80*4d6fc14bSjoerg    concept common_range = see below;
81*4d6fc14bSjoerg}
82*4d6fc14bSjoerg
83*4d6fc14bSjoerg*/
84*4d6fc14bSjoerg
85*4d6fc14bSjoerg#include <__config>
86*4d6fc14bSjoerg#include <__ranges/access.h>
87*4d6fc14bSjoerg#include <__ranges/concepts.h>
88*4d6fc14bSjoerg#include <__ranges/data.h>
89*4d6fc14bSjoerg#include <__ranges/empty.h>
90*4d6fc14bSjoerg#include <__ranges/enable_borrowed_range.h>
91*4d6fc14bSjoerg#include <__ranges/view.h>
92*4d6fc14bSjoerg#include <__ranges/size.h>
93*4d6fc14bSjoerg#include <compare>          // Required by the standard.
94*4d6fc14bSjoerg#include <initializer_list> // Required by the standard.
95*4d6fc14bSjoerg#include <iterator>         // Required by the standard.
96*4d6fc14bSjoerg#include <type_traits>
97*4d6fc14bSjoerg#include <version>
98*4d6fc14bSjoerg
99*4d6fc14bSjoerg#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
100*4d6fc14bSjoerg#pragma GCC system_header
101*4d6fc14bSjoerg#endif
102*4d6fc14bSjoerg
103*4d6fc14bSjoerg_LIBCPP_PUSH_MACROS
104*4d6fc14bSjoerg#include <__undef_macros>
105*4d6fc14bSjoerg
106*4d6fc14bSjoerg_LIBCPP_BEGIN_NAMESPACE_STD
107*4d6fc14bSjoerg
108*4d6fc14bSjoerg#if _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_RANGES)
109*4d6fc14bSjoerg
110*4d6fc14bSjoerg#endif // _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_RANGES)
111*4d6fc14bSjoerg
112*4d6fc14bSjoerg_LIBCPP_END_NAMESPACE_STD
113*4d6fc14bSjoerg
114*4d6fc14bSjoerg_LIBCPP_POP_MACROS
115*4d6fc14bSjoerg
116*4d6fc14bSjoerg#endif // _LIBCPP_RANGES
117