3#include "../../shims/stdtype_traits.hpp"
5#include "detail_block.hpp"
16 template <
template <
class,
size_t>
class CRefValue>
23 template <size_t I, class Ty, size_t K, std::enable_if_t<less<I, K>::value,
int> = 0>
24 static CVB_FORCE_INLINE
void set(CRefValue<Ty, K> &refVal,
const Ty *val)
noexcept
26 refVal.pointers_[I] =
const_cast<Ty *
>(val);
24 static CVB_FORCE_INLINE
void set(CRefValue<Ty, K> &refVal,
const Ty *val)
noexcept {
…}
35 template <
template <
class,
size_t>
class RValue>
42 template <size_t I, class Ty, size_t K, std::enable_if_t<less<I, K>::value,
int> = 0>
43 static CVB_FORCE_INLINE
void set(RValue<Ty, K> &refVal, Ty *val)
noexcept
45 refVal.pointers_[I] = val;
43 static CVB_FORCE_INLINE
void set(RValue<Ty, K> &refVal, Ty *val)
noexcept {
…}
55 template <
class T,
size_t K>
56 class ConstRefValue final
58 static_assert(K > 0,
"Cvb: ConstRefValue must hold at least one element.");
60 template <
class Ty,
class ACCESSTRAIT>
62 template <
template <
class,
size_t>
class CRefValue>
63 friend struct ConstRefValueSetter;
72 for (
auto &ptr : pointers_)
79 using ComponentType = T;
87 template <
class... TT>
89 : pointers_({
const_cast<T *
>(&refs)...})
93 static_assert(
sizeof...(TT) == K,
"Cvb: Number of parameters must equal the number of elements.");
96 ConstRefValue(
const ConstRefValue &other)
noexcept =
default;
97 ConstRefValue &operator=(
const ConstRefValue &other)
noexcept =
default;
98 ConstRefValue(ConstRefValue &&other)
noexcept =
default;
99 ConstRefValue &operator=(ConstRefValue &&other)
noexcept =
default;
100 ~ConstRefValue() =
default;
103 template <
class Ty,
size_t... I>
104 Ty
Cast(std::index_sequence<I...>)
const noexcept
106 using expander =
int[];
110 expander{0, ((void)set<I>(value, *pointers_[I]), 0)...};
124 return Cast<Ty>(std::make_index_sequence<K>());
134 return *pointers_[0];
132 T
X() const noexcept {
…}
142 template <size_t N = K, std::enable_if_t<less<1, N>::value,
int> = 0>
145 return *pointers_[1];
143 T
Y() const noexcept {
…}
153 template <size_t N = K, std::enable_if_t<less<2, N>::value,
int> = 0>
156 return *pointers_[2];
154 T
Z() const noexcept {
…}
164 template <size_t N = K, std::enable_if_t<less<3, N>::value,
int> = 0>
167 return *pointers_[3];
165 T
W() const noexcept {
…}
180 return *pointers_[i];
56 class ConstRefValue final {
…};
199 template <
class T,
size_t K>
212 static_assert(K > 0,
"Cvb: RefValue must hold at least one element.");
214 template <
class Ty,
class ACCESSTRAIT>
216 template <
template <
class,
size_t>
class RValue>
217 friend struct RefValueSetter;
226 for (
auto &ptr : pointers_)
233 using ComponentType = T;
240 template <
class... TT>
242 : pointers_({
const_cast<T *
>(&refs)...})
248 RefValue(
const RefValue &other)
noexcept =
default;
249 RefValue &operator=(
const RefValue &other)
noexcept =
default;
250 RefValue(RefValue &&other)
noexcept =
default;
251 RefValue &operator=(RefValue &&other)
noexcept =
default;
252 ~RefValue() =
default;
255 template <
class Ty,
size_t... I>
256 RefValue<T, K> &Assign(
const Ty &other, std::index_sequence<I...>)
noexcept
258 using expander =
int[];
261 expander{0, ((void)(*pointers_[I] =
get<I>(other)), 0)...};
278 return Assign(other, std::make_index_sequence<K>());
292 static_assert(N == K,
"Cvb: The initializer list must contain K elements.");
294 for (
int i = 0; i < N; ++i)
296 *pointers_[i] = list[i];
302 template <
class Ty,
size_t... I>
303 Ty
Cast(std::index_sequence<I...>)
const noexcept
305 using expander =
int[];
309 expander{0, ((void)
set<I>(value, *pointers_[I]), 0)...};
323 return Cast<Ty>(std::make_index_sequence<K>());
333 return *pointers_[0];
331 T
X() const noexcept {
…}
343 return *pointers_[0];
351 template <size_t N = K, std::enable_if_t<less<1, N>::value,
int> = 0>
354 return *pointers_[1];
352 T
Y() const noexcept {
…}
362 template <size_t N = K, std::enable_if_t<less<1, N>::value,
int> = 0>
365 return *pointers_[1];
373 template <size_t N = K, std::enable_if_t<less<2, N>::value,
int> = 0>
376 return *pointers_[2];
374 T
Z() const noexcept {
…}
384 template <size_t N = K, std::enable_if_t<less<2, N>::value,
int> = 0>
387 return *pointers_[2];
395 template <size_t N = K, std::enable_if_t<less<3, N>::value,
int> = 0>
398 return *pointers_[3];
396 T
W() const noexcept {
…}
406 template <size_t N = K, std::enable_if_t<less<3, N>::value,
int> = 0>
409 return *pointers_[3];
422 return *pointers_[i];
435 return *pointers_[i];
200 class RefValue final {
…};
461 template <size_t I, class T, size_t K, std::enable_if_t<less<I, K>::value,
int> = 0>
462 auto get(
const RefValue<T, K> &refVal)
noexcept ->
decltype(refVal[I])
462 auto get(
const RefValue<T, K> &refVal)
noexcept ->
decltype(refVal[I]) {
…}
479 template <size_t I, class T, size_t K, std::enable_if_t<less<I, K>::value,
int> = 0>
480 auto get(
const ConstRefValue<T, K> &refVal)
noexcept ->
decltype(refVal[I])
480 auto get(
const ConstRefValue<T, K> &refVal)
noexcept ->
decltype(refVal[I]) {
…}
497 template <size_t I, class T, size_t K, std::enable_if_t<less<I, K>::value,
int> = 0>
498 void set(RefValue<T, K> &refVal,
const T &val)
noexcept
498 void set(RefValue<T, K> &refVal,
const T &val)
noexcept {
…}
520 template <
size_t I,
class Ty,
size_t K>
521 CVB_FORCE_INLINE
void internal_set(RefValue<Ty, K> &refVal, Ty *val)
noexcept
523 assert(val !=
nullptr);
525 RefValueSetter<RefValue>::template
set<I>(refVal, val);
521 CVB_FORCE_INLINE
void internal_set(RefValue<Ty, K> &refVal, Ty *val)
noexcept {
…}
544 template <
size_t I,
class Ty,
size_t K>
545 CVB_FORCE_INLINE
void internal_set(ConstRefValue<Ty, K> &refVal,
const Ty *val)
noexcept
547 assert(val !=
nullptr);
549 ConstRefValueSetter<ConstRefValue>::template set<I>(refVal, val);
545 CVB_FORCE_INLINE
void internal_set(ConstRefValue<Ty, K> &refVal,
const Ty *val)
noexcept {
…}
T X() const noexcept
Get const value of the first (x) value.
Definition block_helper_ref_value.hpp:132
ConstRefValue(const TT &...refs)
Constructor from reference values.
Definition block_helper_ref_value.hpp:88
T W() const noexcept
Get const value of the fourth (w) value.
Definition block_helper_ref_value.hpp:165
Ty Cast() const noexcept
Cast to any type, for which a set<size_t>(Ty) function exists.
Definition block_helper_ref_value.hpp:122
T Z() const noexcept
Get const value of the third (z) value.
Definition block_helper_ref_value.hpp:154
static constexpr size_t NumValues() noexcept
Get number of values stored in this ConstRefValue.
Definition block_helper_ref_value.hpp:188
T operator[](size_t i) const noexcept
Element access.
Definition block_helper_ref_value.hpp:176
auto get(const ConstRefValue< T, K > &refVal) noexcept -> decltype(refVal[I])
Get's the I-th element of the ConstRefValue<T,K>.
Definition block_helper_ref_value.hpp:480
T Y() const noexcept
Get const value of the second (y) value.
Definition block_helper_ref_value.hpp:143
CVB_FORCE_INLINE void internal_set(ConstRefValue< Ty, K > &refVal, const Ty *val) noexcept
Set's the I-th pointer in the ConstRefValue<T,K> refVal.
Definition block_helper_ref_value.hpp:545
void set(RefValue< T, K > &refVal, const T &val) noexcept
Set's the value of the I-th element in the RefValue<T,K> refVal.
Definition block_helper_ref_value.hpp:498
T X() const noexcept
Get const value of the first (x) value.
Definition block_helper_ref_value.hpp:331
T & Y() noexcept
Get reference to the second (y) value.
Definition block_helper_ref_value.hpp:363
RefValue(TT &...refs)
Constructor from reference values.
Definition block_helper_ref_value.hpp:241
T W() const noexcept
Get const value of the fourth (w) value.
Definition block_helper_ref_value.hpp:396
Ty Cast() const noexcept
Cast to any type, for which a set<size_t>(Ty) function exists.
Definition block_helper_ref_value.hpp:321
CVB_FORCE_INLINE void internal_set(RefValue< Ty, K > &refVal, Ty *val) noexcept
Set's the I-th pointer in the RefValue<T,K> refVal.
Definition block_helper_ref_value.hpp:521
T & X() noexcept
Get reference to the first (x) value.
Definition block_helper_ref_value.hpp:341
T Z() const noexcept
Get const value of the third (z) value.
Definition block_helper_ref_value.hpp:374
RefValue< T, K > & operator=(const T(&list)[N]) noexcept
Assignment from a N-element initializer list or array. The values pointed to by this class are overwr...
Definition block_helper_ref_value.hpp:290
T & W() noexcept
Get reference to the fourth (w) value.
Definition block_helper_ref_value.hpp:407
T operator[](size_t i) const noexcept
Element access.
Definition block_helper_ref_value.hpp:418
T & Z() noexcept
Get reference to the third (z) value.
Definition block_helper_ref_value.hpp:385
T & operator[](size_t i) noexcept
Mutable element access.
Definition block_helper_ref_value.hpp:431
T Y() const noexcept
Get const value of the second (y) value.
Definition block_helper_ref_value.hpp:352
static constexpr const size_t NumValues() noexcept
Get number of values stored in this RefValue.
Definition block_helper_ref_value.hpp:443
RefValue< T, K > & operator=(const Ty &other) noexcept
Assignment from any type, for which get<size_t>(Ty) function exists. The values pointed to by this cl...
Definition block_helper_ref_value.hpp:276
auto get(const RefValue< T, K > &refVal) noexcept -> decltype(refVal[I])
Get's the I-th element of the RefValue<T,K>.
Definition block_helper_ref_value.hpp:462
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17
Helper class for setting the pointers, as friending template functions is not really stable.
Definition block_helper_ref_value.hpp:18
static CVB_FORCE_INLINE void set(CRefValue< Ty, K > &refVal, const Ty *val) noexcept
Set's the I-th pointer in the RefValue<T,K> refVal.
Definition block_helper_ref_value.hpp:24
Helper class for setting the pointers, as friending template functions is not really stable.
Definition block_helper_ref_value.hpp:37
static CVB_FORCE_INLINE void set(RValue< Ty, K > &refVal, Ty *val) noexcept
Set's the I-th pointer in the ConstRefValue<T,K> refVal.
Definition block_helper_ref_value.hpp:43