commonlib
reverse_container_view.h
1 
11 #pragma once
12 
13 #include "memory.h"
14 
15 BEGIN_NAMESPACE_MEMORY
16 
17 template <typename T, bool CopyValue = !std::is_lvalue_reference_v<T>>
19 
23 template <typename T>
24 struct ReverseContainerView<T, false>
25 {
26  explicit ReverseContainerView(T& container)
27  : container(container)
28  {
29  }
30 
35  auto begin()
36  {
37  return container.rbegin();
38  }
39 
44  auto end()
45  {
46  return container.rend();
47  }
48 protected:
49  T& container;
50 };
51 
55 template <typename T>
56 struct ReverseContainerView<T, true>
57 {
58  explicit ReverseContainerView(T container)
59  : container(std::move(container))
60  {
61  }
62 
67  auto begin()
68  {
69  return container.rbegin();
70  }
71 
76  auto end()
77  {
78  return container.rend();
79  }
80 protected:
81  const T container;
82 };
83 
84 template <typename Container>
85 explicit ReverseContainerView(Container&& container) -> ReverseContainerView<Container>;
86 
87 END_NAMESPACE_MEMORY
auto begin()
Return iterator to beginning.
Definition: reverse_container_view.h:67
Definition: reverse_container_view.h:18
auto begin()
Return iterator to beginning.
Definition: reverse_container_view.h:35
auto end()
Return iterator to end.
Definition: reverse_container_view.h:76
auto end()
Return iterator to end.
Definition: reverse_container_view.h:44