File indexing completed on 2026-05-03 08:14:02
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef _LIBCPP___RANGES_OWNING_VIEW_H
0011 #define _LIBCPP___RANGES_OWNING_VIEW_H
0012
0013 #include <__concepts/constructible.h>
0014 #include <__concepts/movable.h>
0015 #include <__config>
0016 #include <__ranges/access.h>
0017 #include <__ranges/concepts.h>
0018 #include <__ranges/data.h>
0019 #include <__ranges/empty.h>
0020 #include <__ranges/enable_borrowed_range.h>
0021 #include <__ranges/size.h>
0022 #include <__ranges/view_interface.h>
0023 #include <__type_traits/remove_cvref.h>
0024 #include <__utility/move.h>
0025
0026 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
0027 # pragma GCC system_header
0028 #endif
0029
0030 _LIBCPP_PUSH_MACROS
0031 #include <__undef_macros>
0032
0033 _LIBCPP_BEGIN_NAMESPACE_STD
0034
0035 #if _LIBCPP_STD_VER >= 20
0036
0037 namespace ranges {
0038 template <range _Rp>
0039 requires movable<_Rp> && (!__is_std_initializer_list<remove_cvref_t<_Rp>>)
0040 class owning_view : public view_interface<owning_view<_Rp>> {
0041 _Rp __r_ = _Rp();
0042
0043 public:
0044 _LIBCPP_HIDE_FROM_ABI owning_view()
0045 requires default_initializable<_Rp>
0046 = default;
0047 _LIBCPP_HIDE_FROM_ABI constexpr owning_view(_Rp&& __r) : __r_(std::move(__r)) {}
0048
0049 _LIBCPP_HIDE_FROM_ABI owning_view(owning_view&&) = default;
0050 _LIBCPP_HIDE_FROM_ABI owning_view& operator=(owning_view&&) = default;
0051
0052 _LIBCPP_HIDE_FROM_ABI constexpr _Rp& base() & noexcept { return __r_; }
0053 _LIBCPP_HIDE_FROM_ABI constexpr const _Rp& base() const& noexcept { return __r_; }
0054 _LIBCPP_HIDE_FROM_ABI constexpr _Rp&& base() && noexcept { return std::move(__r_); }
0055 _LIBCPP_HIDE_FROM_ABI constexpr const _Rp&& base() const&& noexcept { return std::move(__r_); }
0056
0057 _LIBCPP_HIDE_FROM_ABI constexpr iterator_t<_Rp> begin() { return ranges::begin(__r_); }
0058 _LIBCPP_HIDE_FROM_ABI constexpr sentinel_t<_Rp> end() { return ranges::end(__r_); }
0059 _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
0060 requires range<const _Rp>
0061 {
0062 return ranges::begin(__r_);
0063 }
0064 _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
0065 requires range<const _Rp>
0066 {
0067 return ranges::end(__r_);
0068 }
0069
0070 _LIBCPP_HIDE_FROM_ABI constexpr bool empty()
0071 requires requires { ranges::empty(__r_); }
0072 {
0073 return ranges::empty(__r_);
0074 }
0075 _LIBCPP_HIDE_FROM_ABI constexpr bool empty() const
0076 requires requires { ranges::empty(__r_); }
0077 {
0078 return ranges::empty(__r_);
0079 }
0080
0081 _LIBCPP_HIDE_FROM_ABI constexpr auto size()
0082 requires sized_range<_Rp>
0083 {
0084 return ranges::size(__r_);
0085 }
0086 _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
0087 requires sized_range<const _Rp>
0088 {
0089 return ranges::size(__r_);
0090 }
0091
0092 _LIBCPP_HIDE_FROM_ABI constexpr auto data()
0093 requires contiguous_range<_Rp>
0094 {
0095 return ranges::data(__r_);
0096 }
0097 _LIBCPP_HIDE_FROM_ABI constexpr auto data() const
0098 requires contiguous_range<const _Rp>
0099 {
0100 return ranges::data(__r_);
0101 }
0102 };
0103 _LIBCPP_CTAD_SUPPORTED_FOR_TYPE(owning_view);
0104
0105 template <class _Tp>
0106 inline constexpr bool enable_borrowed_range<owning_view<_Tp>> = enable_borrowed_range<_Tp>;
0107
0108 }
0109
0110 #endif
0111
0112 _LIBCPP_END_NAMESPACE_STD
0113
0114 _LIBCPP_POP_MACROS
0115
0116 #endif