12 template <
class,
class =
void>
20 is_builtin_convertible<T>,
26 using size_type =
typename container_type::size_type;
28 using reference =
typename container_type::reference;
30 using pointer =
typename container_type::pointer;
32 using iterator =
typename container_type::iterator;
52 _unwrapped(
std::move(a_rhs._unwrapped)),
53 _wrapped(
std::move(a_rhs._wrapped))
68 if (
this != std::addressof(a_rhs)) {
70 _unwrapped = std::move(a_rhs._unwrapped);
71 _wrapped = std::move(a_rhs._wrapped);
90 [[nodiscard]]
pointer data() noexcept {
return _unwrapped.data(); }
97 [[nodiscard]]
iterator end() noexcept {
return _unwrapped.end(); }
109 [[nodiscard]]
bool empty() const noexcept {
return _unwrapped.empty(); }
116 swap(_unwrapped, a_rhs._unwrapped);
117 swap(_wrapped, a_rhs._wrapped);
124 const auto SIZE =
static_cast<std::uint32_t
>(_unwrapped.size());
125 for (std::uint32_t i = 0; i < SIZE; ++i) {
126 (*_wrapped)[i].Pack(_unwrapped[i]);
131 void do_unwrap(
const Variable* a_wrapped)
133 assert(a_wrapped && a_wrapped->IsArray());
134 auto arr = a_wrapped->GetArray();
135 if (_wrapped != arr) {
136 _wrapped = std::move(arr);
137 _unwrapped.reserve(_wrapped->size());
138 for (
auto& elem : *_wrapped) {
139 _unwrapped.push_back(elem.Unpack<value_type>());
144 container_type _unwrapped;
145 BSTSmartPointer<Array> _wrapped;
Definition: Variable.h:15
typename container_type::pointer pointer
Definition: ReferenceArray.h:30
reverse_iterator rend() noexcept
Definition: ReferenceArray.h:105
const_iterator cbegin() const noexcept
Definition: ReferenceArray.h:95
size_type size() const noexcept
Definition: ReferenceArray.h:111
const_reference at(size_type a_pos) const
Definition: ReferenceArray.h:79
const_reference back() const
Definition: ReferenceArray.h:88
reference_array()
Definition: ReferenceArray.h:37
reference operator[](size_type a_pos)
Definition: ReferenceArray.h:81
bool empty() const noexcept
Definition: ReferenceArray.h:109
iterator end() noexcept
Definition: ReferenceArray.h:97
typename container_type::const_iterator const_iterator
Definition: ReferenceArray.h:33
reference at(size_type a_pos)
Definition: ReferenceArray.h:78
reverse_iterator rbegin() noexcept
Definition: ReferenceArray.h:101
typename container_type::reference reference
Definition: ReferenceArray.h:28
reference_array & operator=(reference_array &&a_rhs)
Definition: ReferenceArray.h:66
const_reverse_iterator crbegin() const noexcept
Definition: ReferenceArray.h:103
const_reference front() const
Definition: ReferenceArray.h:85
~reference_array()
Definition: ReferenceArray.h:56
const_reverse_iterator crend() const noexcept
Definition: ReferenceArray.h:107
typename container_type::const_pointer const_pointer
Definition: ReferenceArray.h:31
reference back()
Definition: ReferenceArray.h:87
typename container_type::reverse_iterator reverse_iterator
Definition: ReferenceArray.h:34
void swap(reference_array &a_rhs)
Definition: ReferenceArray.h:113
reference_array & operator=(const reference_array &)=delete
const_pointer data() const noexcept
Definition: ReferenceArray.h:91
iterator begin() noexcept
Definition: ReferenceArray.h:93
pointer data() noexcept
Definition: ReferenceArray.h:90
reference_array(reference_array &&a_rhs)
Definition: ReferenceArray.h:51
const_iterator cend() const noexcept
Definition: ReferenceArray.h:99
reference front()
Definition: ReferenceArray.h:84
typename container_type::value_type value_type
Definition: ReferenceArray.h:25
typename container_type::iterator iterator
Definition: ReferenceArray.h:32
reference_array(const reference_array &)=delete
typename container_type::const_reference const_reference
Definition: ReferenceArray.h:29
std::vector< T > container_type
Definition: ReferenceArray.h:24
reference_array(const Variable *a_wrapped)
Definition: ReferenceArray.h:42
typename container_type::size_type size_type
Definition: ReferenceArray.h:26
const_reference operator[](size_type a_pos) const
Definition: ReferenceArray.h:82
const_iterator end() const noexcept
Definition: ReferenceArray.h:98
const_iterator begin() const noexcept
Definition: ReferenceArray.h:94
reference_array & operator=(const Variable *a_wrapped)
Definition: ReferenceArray.h:58
typename container_type::const_reverse_iterator const_reverse_iterator
Definition: ReferenceArray.h:35
typename container_type::difference_type difference_type
Definition: ReferenceArray.h:27
const_reverse_iterator rbegin() const noexcept
Definition: ReferenceArray.h:102
const_reverse_iterator rend() const noexcept
Definition: ReferenceArray.h:106
Definition: ReferenceArray.h:13
void swap(reference_array< T > &a_lhs, reference_array< T > &a_rhs)
Definition: ReferenceArray.h:149
Definition: AbsorbEffect.h:6
Definition: NiBinaryStream.h:94