Loading [MathJax]/extensions/tex2jax.js
Iros
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
Loading...
Searching...
No Matches
as_rvalue_view.h
Go to the documentation of this file.
1#pragma once
2
10#include "di/util/move.h"
11
12namespace di::container {
13template<concepts::View View>
14requires(concepts::InputContainer<View>)
17 , public meta::EnableBorrowedContainer<AsRValueView<View>, concepts::BorrowedContainer<View>> {
18public:
19 constexpr AsRValueView()
21 = default;
22
23 constexpr explicit AsRValueView(View view) : m_view(util::move(view)) {}
24
25 constexpr auto base() const& -> View
26 requires(concepts::CopyConstructible<View>)
27 {
28 return m_view;
29 }
30
31 constexpr auto base() && -> View { return util::move(m_view); }
32
33 constexpr auto begin()
35 {
36 return MoveIterator(container::begin(m_view));
37 }
38
39 constexpr auto begin() const
40 requires(concepts::Container<View const>)
41 {
42 return MoveIterator(container::begin(m_view));
43 }
44
45 constexpr auto end()
47 {
48 if constexpr (concepts::CommonContainer<View>) {
49 return MoveIterator(container::end(m_view));
50 } else {
51 return MoveSentinel(container::end(m_view));
52 }
53 }
54
55 constexpr auto end() const
56 requires(concepts::Container<View const>)
57 {
59 return MoveIterator(container::end(m_view));
60 } else {
61 return MoveSentinel(container::end(m_view));
62 }
63 }
64
65 constexpr auto size()
67 {
68 return container::size(m_view);
69 }
70
71 constexpr auto size() const
72 requires(concepts::SizedContainer<View const>)
73 {
74 return container::size(m_view);
75 }
76
77private:
78 View m_view;
79};
80
81template<typename Con>
83}
Definition as_rvalue_view.h:17
constexpr auto size()
Definition as_rvalue_view.h:65
constexpr auto size() const
Definition as_rvalue_view.h:71
constexpr auto end()
Definition as_rvalue_view.h:45
constexpr auto begin() const
Definition as_rvalue_view.h:39
constexpr auto base() const &-> View requires(concepts::CopyConstructible< View >)
Definition as_rvalue_view.h:25
constexpr auto begin()
Definition as_rvalue_view.h:33
constexpr AsRValueView()=default
constexpr AsRValueView(View view)
Definition as_rvalue_view.h:23
constexpr auto end() const
Definition as_rvalue_view.h:55
constexpr auto base() &&-> View
Definition as_rvalue_view.h:31
Definition move_iterator.h:24
Definition move_sentinel.h:9
Definition view_interface.h:26
Definition view.h:35
Definition common_container.h:10
Definition operations.h:27
Definition simple_view.h:11
Definition sized_container.h:8
Definition any_storable.h:9
Definition adjacent.h:8
Definition sequence.h:12
constexpr auto move
Definition move.h:38
constexpr auto size
Definition size.h:54
constexpr auto end
Definition end.h:47
AsRValueView(Con &&) -> AsRValueView< meta::AsView< Con > >
constexpr auto begin
Definition begin.h:44
Definition merge_interfaces.h:6
Definition vocab.h:96
Definition enable_borrowed_container.h:9