From 79faf857d988bcbfc993f0a17cd38835d9d243d9 Mon Sep 17 00:00:00 2001 From: pasbi Date: Mon, 9 Sep 2024 07:47:26 +0200 Subject: [PATCH] Merge pull request #26042 from pasbi:add-PtrStepSz_size Add size() to CUDA PtrStepSz #26042 According to [cppreference.com compiler support table](https://en.cppreference.com/w/cpp/compiler_support/17), `nvcc` supports `[[nodiscard]]` from version 11. ### Pull Request Readiness Checklist See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request - [x] I agree to contribute to the project under Apache 2 License. - [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV - [x] The PR is proposed to the proper branch - [ ] There is a reference to the original bug report and related work - [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable Patch to opencv_extra has the same branch name. - [ ] The feature is well documented and sample code can be built with the project CMake Related: https://github.com/opencv/opencv/pull/25659 --- modules/core/include/opencv2/core/cuda_types.hpp | 8 ++++++++ modules/core/include/opencv2/core/cvdef.h | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/modules/core/include/opencv2/core/cuda_types.hpp b/modules/core/include/opencv2/core/cuda_types.hpp index b33f06179d..ddee2f3d59 100644 --- a/modules/core/include/opencv2/core/cuda_types.hpp +++ b/modules/core/include/opencv2/core/cuda_types.hpp @@ -66,6 +66,9 @@ #define __CV_CUDA_HOST_DEVICE__ #endif +#include "opencv2/core/cvdef.h" +#include "opencv2/core.hpp" + namespace cv { namespace cuda @@ -124,6 +127,11 @@ namespace cv int cols; int rows; + + CV_NODISCARD_STD __CV_CUDA_HOST_DEVICE__ Size size() const { return {cols, rows}; } + CV_NODISCARD_STD __CV_CUDA_HOST_DEVICE__ T& operator ()(const Point &pos) { return (*this)(pos.y, pos.x); } + CV_NODISCARD_STD __CV_CUDA_HOST_DEVICE__ const T& operator ()(const Point &pos) const { return (*this)(pos.y, pos.x); } + using PtrStep::operator(); }; typedef PtrStepSz PtrStepSzb; diff --git a/modules/core/include/opencv2/core/cvdef.h b/modules/core/include/opencv2/core/cvdef.h index ff1a3d7a5f..a2154b2df2 100644 --- a/modules/core/include/opencv2/core/cvdef.h +++ b/modules/core/include/opencv2/core/cvdef.h @@ -747,7 +747,11 @@ __CV_ENUM_FLAGS_BITWISE_XOR_EQ (EnumType, EnumType) # define __has_cpp_attribute(__x) 0 # endif # if __has_cpp_attribute(nodiscard) -# define CV_NODISCARD_STD [[nodiscard]] +# if defined(__NVCC__) && __CUDACC_VER_MAJOR__ < 12 +# define CV_NODISCARD_STD +# else +# define CV_NODISCARD_STD [[nodiscard]] +# endif # elif __cplusplus >= 201703L // available when compiler is C++17 compliant # define CV_NODISCARD_STD [[nodiscard]]