Iros
 
Loading...
Searching...
No Matches
owning_view.h
Go to the documentation of this file.
1#pragma once
2
12#include "di/meta/language.h"
13#include "di/meta/operations.h"
14#include "di/util/move.h"
15
16namespace di::container {
17template<concepts::Container Cont>
18requires(concepts::Movable<Cont> && !concepts::InitializerList<Cont>)
20 : public ViewInterface<OwningView<Cont>>
21 , public meta::EnableBorrowedContainer<OwningView<Cont>, concepts::BorrowedContainer<Cont>> {
22public:
23 constexpr OwningView()
25 = default;
26 constexpr OwningView(OwningView const&) = delete;
27 constexpr OwningView(OwningView&&) = default;
28 constexpr OwningView(Cont&& container) : m_container(util::move(container)) {}
29
30 constexpr auto operator=(OwningView const&) -> OwningView& = delete;
31 constexpr auto operator=(OwningView&&) -> OwningView& = default;
32
33 constexpr auto base() & -> Cont& { return m_container; }
34 constexpr auto base() const& -> Cont const& { return m_container; }
35 constexpr auto base() && -> Cont&& { return util::move(m_container); }
36 constexpr auto base() const&& -> Cont const&& { return util::move(m_container); }
37
38 constexpr auto begin() { return container::begin(m_container); }
39 constexpr auto begin() const
40 requires(concepts::Container<Cont const>)
41 {
42 return container::begin(m_container);
43 }
44
45 constexpr auto end() { return container::end(m_container); }
46 constexpr auto end() const
47 requires(concepts::Container<Cont const>)
48 {
49 return container::end(m_container);
50 }
51
52 constexpr auto empty() -> bool
54 {
55 return container::empty(m_container);
56 }
57 constexpr auto empty() const -> bool
58 requires(concepts::HasEmptyContainer<Cont const>)
59 {
60 return container::empty(m_container);
61 }
62
63 constexpr auto size()
65 {
66 return container::size(m_container);
67 }
68 constexpr auto size() const
69 requires(concepts::SizedContainer<Cont const>)
70 {
71 return container::size(m_container);
72 }
73
74 constexpr auto data()
76 {
77 return container::data(m_container);
78 }
79 constexpr auto data() const
80 requires(concepts::ContiguousContainer<Cont const>)
81 {
82 return container::data(m_container);
83 }
84
85private:
86 template<typename T, typename U>
90 return container::reconstruct(in_place_type<Cont>, util::forward<T>(t), util::forward<U>(u));
91 }
92
93 Cont m_container;
94};
95}
constexpr auto base() &-> Cont &
Definition owning_view.h:33
constexpr auto data()
Definition owning_view.h:74
constexpr auto base() const &&-> Cont const &&
Definition owning_view.h:36
constexpr auto end() const
Definition owning_view.h:46
constexpr auto end()
Definition owning_view.h:45
constexpr auto data() const
Definition owning_view.h:79
constexpr auto empty() const -> bool requires(concepts::HasEmptyContainer< Cont const >)
Definition owning_view.h:57
constexpr auto size() const
Definition owning_view.h:68
constexpr auto begin()
Definition owning_view.h:38
constexpr auto begin() const
Definition owning_view.h:39
constexpr auto operator=(OwningView const &) -> OwningView &=delete
constexpr auto base() const &-> Cont const &
Definition owning_view.h:34
constexpr auto base() &&-> Cont &&
Definition owning_view.h:35
constexpr friend auto tag_invoke(types::Tag< container::reconstruct >, InPlaceType< OwningView >, T &&t, U &&u)
Definition owning_view.h:89
constexpr OwningView(Cont &&container)
Definition owning_view.h:28
constexpr OwningView()=default
constexpr auto operator=(OwningView &&) -> OwningView &=default
constexpr auto empty() -> bool requires(concepts::HasEmptyContainer< Cont >)
Definition owning_view.h:52
constexpr OwningView(OwningView &&)=default
constexpr auto size()
Definition owning_view.h:63
constexpr OwningView(OwningView const &)=delete
Definition view_interface.h:26
Definition contiguous_container.h:12
Definition operations.h:27
Definition has_empty_container.h:7
Definition invoke.h:58
Definition core.h:114
Definition sized_container.h:8
Definition any_storable.h:9
Definition sequence.h:12
constexpr auto empty
Definition empty.h:45
constexpr auto reconstruct
Definition reconstruct.h:75
constexpr auto move
Definition move.h:38
constexpr auto size
Definition size.h:54
constexpr auto data
Definition data.h:51
constexpr auto end
Definition end.h:47
constexpr auto begin
Definition begin.h:44
Definition merge_interfaces.h:6
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
Definition vocab.h:96
constexpr auto in_place_type
Definition in_place_type.h:12
Definition enable_borrowed_container.h:9
Definition in_place_type.h:5