Iros
 
Loading...
Searching...
No Matches
common_view.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace di::container {
7template<concepts::View View>
8requires(!concepts::CommonContainer<View> && concepts::Copyable<meta::ContainerIterator<View>>)
11 , public meta::EnableBorrowedContainer<CommonView<View>, concepts::BorrowedContainer<View>> {
12public:
13 constexpr CommonView()
15 = default;
16
17 constexpr explicit CommonView(View view) : m_view(util::move(view)) {}
18
19 constexpr auto base() const& -> View
20 requires(concepts::CopyConstructible<View>)
21 {
22 return m_view;
23 }
24
25 constexpr auto base() && -> View { return util::move(m_view); }
26
27 constexpr auto begin() const
28 requires(!concepts::SimpleView<View>)
29 {
31 return container::begin(m_view);
32 } else {
34 container::begin(m_view));
35 }
36 }
37
38 constexpr auto begin() const
39 requires(concepts::Container<View const>)
40 {
42 return container::begin(m_view);
43 } else {
45 container::begin(m_view));
46 }
47 }
48
49 constexpr auto end() const
50 requires(!concepts::SimpleView<View>)
51 {
53 return container::begin(m_view) + container::size(m_view);
54 } else {
56 }
57 }
58
59 constexpr auto end() const
60 requires(concepts::Container<View const>)
61 {
63 return container::begin(m_view) + container::size(m_view);
64 } else {
66 container::end(m_view));
67 }
68 }
69
70 constexpr auto size()
72 {
73 return container::size(m_view);
74 }
75
76 constexpr auto size() const
77 requires(concepts::SizedContainer<View const>)
78 {
79 return container::size(m_view);
80 }
81
82private:
83 View m_view;
84};
85
86template<typename Con>
88}
Definition common_iterator.h:14
Definition common_view.h:11
constexpr auto end() const
Definition common_view.h:49
constexpr auto end() const
Definition common_view.h:59
constexpr CommonView(View view)
Definition common_view.h:17
constexpr auto size()
Definition common_view.h:70
constexpr auto begin() const
Definition common_view.h:27
constexpr auto size() const
Definition common_view.h:76
constexpr CommonView()=default
constexpr auto base() const &-> View requires(concepts::CopyConstructible< View >)
Definition common_view.h:19
constexpr auto begin() const
Definition common_view.h:38
constexpr auto base() &&-> View
Definition common_view.h:25
Definition view_interface.h:26
Definition view.h:35
Definition operations.h:27
Definition random_access_container.h:8
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
CommonView(Con &&) -> CommonView< meta::AsView< Con > >
constexpr auto end
Definition end.h:47
constexpr auto begin
Definition begin.h:44
Definition merge_interfaces.h:6
decltype(container::end(util::declval< T & >())) ContainerSentinel
Definition container_sentinel.h:8
Definition vocab.h:96
Definition enable_borrowed_container.h:9