VCCC  2024.05
VisualCamp Common C++ library
cv_size.hpp
Go to the documentation of this file.
1 # /*
2 # * Created by YongGyu Lee on 2020/12/08.
3 # */
4 #
5 # ifndef VCCC_TYPE_SUPPORT_OPENCV_CV_SIZE_HPP
6 # define VCCC_TYPE_SUPPORT_OPENCV_CV_SIZE_HPP
7 #
8 # include <tuple>
9 # include <type_traits>
10 # include <utility>
11 #
12 # include "opencv2/opencv.hpp"
13 #
14 # include "vccc/type_traits.hpp"
15 
16 namespace vccc {
17 namespace internal {
18 
19 template<size_t I>
20 struct get_cv_size;
21 
22 template<>
23 struct get_cv_size<0> {
24  template<typename T> static constexpr T& get( cv::Size_<T>& s ) noexcept { return s.width; }
25  template<typename T> static constexpr const T& get(const cv::Size_<T>& s ) noexcept { return s.width; }
26  template<typename T> static constexpr T&& get( cv::Size_<T>&& s) noexcept { return std::move(s.width); }
27  template<typename T> static constexpr const T&& get(const cv::Size_<T>&& s) noexcept { return std::move(s.width); }
28 };
29 
30 template<>
31 struct get_cv_size<1> {
32  template<typename T> static constexpr T& get( cv::Size_<T>& s ) noexcept { return s.height; }
33  template<typename T> static constexpr const T& get(const cv::Size_<T>& s ) noexcept { return s.height; }
34  template<typename T> static constexpr T&& get( cv::Size_<T>&& s) noexcept { return std::move(s.height); }
35  template<typename T> static constexpr const T&& get(const cv::Size_<T>&& s) noexcept { return std::move(s.height); }
36 };
37 
38 } // namespace internal
39 } // namespace vccc
40 
41 namespace std {
42 
52 template<typename T>
53 struct tuple_size<cv::Size_<T>> : std::integral_constant<size_t, 2> {};
56 
63 template<typename T> struct tuple_element<0, cv::Size_<T>> { using type = T; };
64 template<typename T> struct tuple_element<1, cv::Size_<T>> { using type = T; };
67 
75 template<std::size_t i, typename T>
76 constexpr inline tuple_element_t<i, cv::Size_<T>>&
77 get(cv::Size_<T>& size) noexcept {
79 }
80 
81 template<std::size_t i, typename T>
82 constexpr inline const tuple_element_t<i, cv::Size_<T>>&
83 get(const cv::Size_<T>& size) noexcept {
84  return size.width;
85 }
86 
87 template<std::size_t i, typename T>
88 constexpr inline tuple_element_t<i, cv::Size_<T>>&&
89 get(cv::Size_<T>&& size) noexcept {
90  return std::move(vccc::internal::get_cv_size<i>::get(std::move(size)));
91 }
92 
93 template<std::size_t i, typename T>
94 constexpr inline const tuple_element_t<i, cv::Size_<T>>&&
95 get(const cv::Size_<T>&& size) noexcept {
96  return std::move(vccc::internal::get_cv_size<i>::get(std::move(size)));
97 }
98 
102 
103 } // namespace std
104 
105 # endif // VCCC_TYPE_SUPPORT_OPENCV_CV_SIZE_HPP
constexpr VCCC_INLINE_OR_STATIC detail::size_niebloid size
returns the size of a container or array
Definition: size.hpp:145
constexpr const tuple_element_t< i, cv::Size_< T > > && get(const cv::Size_< T > &&size) noexcept
Definition: cv_size.hpp:95
constexpr variant_alternative_t< I, variant< Types... > > & get(variant< Types... > &v)
Definition: variant.hpp:770
Definition: matrix.hpp:495
constexpr std::enable_if_t<(I< m *n), typename vccc::Matrix< T, m, n >::value_type & > get(vccc::Matrix< T, m, n > &matrix)
Definition: matrix.hpp:499
Definition: directory.h:12
T type
Definition: cv_size.hpp:63
T type
Definition: cv_size.hpp:64