5 # ifndef VCCC_TYPE_SUPPORT_OPENCV_CV_VEC_HPP
6 # define VCCC_TYPE_SUPPORT_OPENCV_CV_VEC_HPP
9 # include <type_traits>
12 # include "opencv2/opencv.hpp"
25 template<
size_t I,
bool size_check>
29 struct get_cv_vec<I, true> {
30 template<
typename T,
int cn>
static constexpr T&
get( cv::Vec<T, cn>& v) noexcept {
return v[I]; }
31 template<
typename T,
int cn>
static constexpr
const T&
get(
const cv::Vec<T, cn>& v) noexcept {
return v[I]; }
32 template<
typename T,
int cn>
static constexpr T&&
get( cv::Vec<T, cn>&& v) noexcept {
return std::move(v[I]); }
33 template<
typename T,
int cn>
static constexpr
const T&&
get(
const cv::Vec<T, cn>&& v) noexcept {
return std::move(v[I]); }
36 template<
size_t I,
typename T,
int n>
37 struct tuple_element_impl<I, cv::Vec<T, n>, true> {
52 template<
typename T,
int cn>
53 struct tuple_size<cv::Vec<T, cn>> : std::integral_constant<size_t, cn> {};
63 template<
size_t I,
typename T,
int cn>
64 struct tuple_element<I, cv::Vec<T, cn>> : vccc::internal::tuple_element_impl<I, cv::Vec<T, cn>, (I < cn)> {};
75 template<std::size_t i, typename T, int n>
76 constexpr inline tuple_element_t<i, cv::Vec<T, n>>&
77 get(cv::Vec<T, n>& vec) {
81 template<std::size_t i, typename T, int n>
82 constexpr inline const tuple_element_t<i, cv::Vec<T, n>>&
83 get(const cv::Vec<T, n>& vec) {
87 template<std::size_t i, typename T, int n>
88 constexpr inline tuple_element_t<i, cv::Vec<T, n>>&&
89 get(cv::Vec<T, n>&& vec) {
90 return std::move(vec[i]);
93 template<std::size_t i, typename T, int n>
94 constexpr inline const tuple_element_t<i, cv::Vec<T, n>>&&
95 get(const cv::Vec<T, n>&& vec) {
96 return std::move(vec[i]);
107 template<typename T, int cn, typename N>
108 cv::Vec<T, cn> add(const cv::Vec<T, cn>& vec, N n)
111 for(int i=0; i<cn; ++i)
constexpr variant_alternative_t< I, variant< Types... > > & get(variant< Types... > &v)
Definition: variant.hpp:770
Definition: matrix.hpp:495
Definition: directory.h:12