Iros
 
Loading...
Searching...
No Matches
as_const_view.h
Go to the documentation of this file.
1#pragma once
2
10#include "di/meta/operations.h"
11#include "di/util/move.h"
12
13namespace di::container {
14template<concepts::View View>
15requires(concepts::InputContainer<View>)
18 , public meta::EnableBorrowedContainer<AsConstView<View>, concepts::BorrowedContainer<View>> {
19public:
20 constexpr AsConstView()
22 = default;
23
24 constexpr explicit AsConstView(View view) : m_view(util::move(view)) {}
25
26 constexpr auto base() const& -> View
27 requires(concepts::CopyConstructible<View>)
28 {
29 return m_view;
30 }
31
32 constexpr auto base() && -> View { return util::move(m_view); }
33
34 constexpr auto begin() const
35 requires(!concepts::SimpleView<View>)
36 {
37 return container::cbegin(m_view);
38 }
39
40 constexpr auto begin() const
41 requires(concepts::Container<View const>)
42 {
43 return container::cbegin(m_view);
44 }
45
46 constexpr auto end() const
47 requires(!concepts::SimpleView<View>)
48 {
49 return container::cend(m_view);
50 }
51
52 constexpr auto end() const
53 requires(concepts::Container<View const>)
54 {
55 return container::cend(m_view);
56 }
57
58 constexpr auto size()
60 {
61 return container::size(m_view);
62 }
63
64 constexpr auto size() const
65 requires(concepts::SizedContainer<View const>)
66 {
67 return container::size(m_view);
68 }
69
70private:
71 View m_view;
72};
73
74template<typename Con>
76}
Definition as_const_view.h:18
constexpr AsConstView()=default
constexpr auto base() const &-> View requires(concepts::CopyConstructible< View >)
Definition as_const_view.h:26
constexpr auto begin() const
Definition as_const_view.h:34
constexpr auto begin() const
Definition as_const_view.h:40
constexpr auto base() &&-> View
Definition as_const_view.h:32
constexpr auto end() const
Definition as_const_view.h:46
constexpr auto size() const
Definition as_const_view.h:64
constexpr auto size()
Definition as_const_view.h:58
constexpr AsConstView(View view)
Definition as_const_view.h:24
constexpr auto end() const
Definition as_const_view.h:52
Definition view_interface.h:26
Definition view.h:35
Definition operations.h:27
Definition sized_container.h:8
Definition any_storable.h:9
Definition adjacent.h:8
Definition sequence.h:12
AsConstView(Con &&) -> AsConstView< meta::AsView< Con > >
constexpr auto cend
Definition cend.h:23
constexpr auto move
Definition move.h:38
constexpr auto size
Definition size.h:54
constexpr auto cbegin
Definition cbegin.h:24
Definition merge_interfaces.h:6
Definition vocab.h:96
Definition enable_borrowed_container.h:9