Iros
 
Loading...
Searching...
No Matches
single_view.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/language.h"
6#include "di/types/in_place.h"
7#include "di/types/size_t.h"
8#include "di/util/addressof.h"
9#include "di/util/forward.h"
10#include "di/util/move.h"
11
12namespace di::container {
13template<concepts::Movable T>
14requires(concepts::Object<T>)
16public:
17 constexpr SingleView()
19 = default;
20
21 constexpr explicit SingleView(T const& value)
23 : m_value(value) {}
24
25 constexpr explicit SingleView(T&& value) : m_value(util::move(value)) {}
26
27 template<typename... Args>
28 requires(concepts::ConstructibleFrom<T, Args...>)
29 constexpr explicit SingleView(types::InPlace, Args&&... args) : m_value(util::forward<Args>(args)...) {}
30
31 constexpr auto begin() -> T* { return util::addressof(m_value); }
32 constexpr auto begin() const -> T const* { return util::addressof(m_value); }
33
34 constexpr auto end() { return begin() + 1; }
35 constexpr auto end() const { return begin() + 1; }
36
37 constexpr static auto size() -> types::size_t { return 1; }
38
39 constexpr auto data() { return begin(); }
40 constexpr auto data() const { return begin(); }
41
42private:
43 T m_value;
44};
45
46template<typename T>
48}
Definition single_view.h:15
constexpr auto end()
Definition single_view.h:34
constexpr auto data() const
Definition single_view.h:40
constexpr auto begin() -> T *
Definition single_view.h:31
constexpr SingleView()=default
constexpr SingleView(types::InPlace, Args &&... args)
Definition single_view.h:29
static constexpr auto size() -> types::size_t
Definition single_view.h:37
constexpr SingleView(T &&value)
Definition single_view.h:25
constexpr SingleView(T const &value)
Definition single_view.h:21
constexpr auto begin() const -> T const *
Definition single_view.h:32
constexpr auto data()
Definition single_view.h:39
constexpr auto end() const
Definition single_view.h:35
Definition view_interface.h:26
Definition operations.h:11
Definition operations.h:34
Definition operations.h:27
Definition sequence.h:12
constexpr auto move
Definition move.h:38
SingleView(T) -> SingleView< T >
constexpr auto begin
Definition begin.h:44
std::size_t size_t
Definition size_t.h:12
Definition vocab.h:96
Definition in_place.h:4