EstervQrCode 2.0.0
Library for qr code manipulation
Loading...
Searching...
No Matches
check.hpp
1// This file is part of OpenCV project.
2// It is subject to the license terms in the LICENSE file found in the top-level directory
3// of this distribution and at http://opencv.org/license.html.
4
5#ifndef OPENCV_CORE_CHECK_HPP
6#define OPENCV_CORE_CHECK_HPP
7
8#include <opencv2/core/base.hpp>
9
10namespace cv {
11
14
17
18
20namespace detail {
21
23CV_EXPORTS const char* depthToString_(int depth);
24
26CV_EXPORTS cv::String typeToString_(int type);
27
28enum TestOp {
29 TEST_CUSTOM = 0,
30 TEST_EQ = 1,
31 TEST_NE = 2,
32 TEST_LE = 3,
33 TEST_LT = 4,
34 TEST_GE = 5,
35 TEST_GT = 6,
36 CV__LAST_TEST_OP
37};
38
39struct CheckContext {
40 const char* func;
41 const char* file;
42 int line;
43 enum TestOp testOp;
44 const char* message;
45 const char* p1_str;
46 const char* p2_str;
47};
48
49#ifndef CV__CHECK_FILENAME
50# define CV__CHECK_FILENAME __FILE__
51#endif
52
53#ifndef CV__CHECK_FUNCTION
54# if defined _MSC_VER
55# define CV__CHECK_FUNCTION __FUNCSIG__
56# elif defined __GNUC__
57# define CV__CHECK_FUNCTION __PRETTY_FUNCTION__
58# else
59# define CV__CHECK_FUNCTION "<unknown>"
60# endif
61#endif
62
63#define CV__CHECK_LOCATION_VARNAME(id) CVAUX_CONCAT(CVAUX_CONCAT(__cv_check_, id), __LINE__)
64#define CV__DEFINE_CHECK_CONTEXT(id, message, testOp, p1_str, p2_str) \
65 static const cv::detail::CheckContext CV__CHECK_LOCATION_VARNAME(id) = \
66 { CV__CHECK_FUNCTION, CV__CHECK_FILENAME, __LINE__, testOp, "" message, "" p1_str, "" p2_str }
67
68CV_EXPORTS void CV_NORETURN check_failed_auto(const bool v1, const bool v2, const CheckContext& ctx);
69CV_EXPORTS void CV_NORETURN check_failed_auto(const int v1, const int v2, const CheckContext& ctx);
70CV_EXPORTS void CV_NORETURN check_failed_auto(const size_t v1, const size_t v2, const CheckContext& ctx);
71CV_EXPORTS void CV_NORETURN check_failed_auto(const float v1, const float v2, const CheckContext& ctx);
72CV_EXPORTS void CV_NORETURN check_failed_auto(const double v1, const double v2, const CheckContext& ctx);
73CV_EXPORTS void CV_NORETURN check_failed_auto(const Size_<int> v1, const Size_<int> v2, const CheckContext& ctx);
74CV_EXPORTS void CV_NORETURN check_failed_MatDepth(const int v1, const int v2, const CheckContext& ctx);
75CV_EXPORTS void CV_NORETURN check_failed_MatType(const int v1, const int v2, const CheckContext& ctx);
76CV_EXPORTS void CV_NORETURN check_failed_MatChannels(const int v1, const int v2, const CheckContext& ctx);
77
78CV_EXPORTS void CV_NORETURN check_failed_true(const bool v, const CheckContext& ctx);
79CV_EXPORTS void CV_NORETURN check_failed_false(const bool v, const CheckContext& ctx);
80
81CV_EXPORTS void CV_NORETURN check_failed_auto(const int v, const CheckContext& ctx);
82CV_EXPORTS void CV_NORETURN check_failed_auto(const size_t v, const CheckContext& ctx);
83CV_EXPORTS void CV_NORETURN check_failed_auto(const float v, const CheckContext& ctx);
84CV_EXPORTS void CV_NORETURN check_failed_auto(const double v, const CheckContext& ctx);
85CV_EXPORTS void CV_NORETURN check_failed_auto(const Size_<int> v, const CheckContext& ctx);
86CV_EXPORTS void CV_NORETURN check_failed_auto(const std::string& v1, const CheckContext& ctx);
87CV_EXPORTS void CV_NORETURN check_failed_MatDepth(const int v, const CheckContext& ctx);
88CV_EXPORTS void CV_NORETURN check_failed_MatType(const int v, const CheckContext& ctx);
89CV_EXPORTS void CV_NORETURN check_failed_MatChannels(const int v, const CheckContext& ctx);
90
91
92#define CV__TEST_EQ(v1, v2) ((v1) == (v2))
93#define CV__TEST_NE(v1, v2) ((v1) != (v2))
94#define CV__TEST_LE(v1, v2) ((v1) <= (v2))
95#define CV__TEST_LT(v1, v2) ((v1) < (v2))
96#define CV__TEST_GE(v1, v2) ((v1) >= (v2))
97#define CV__TEST_GT(v1, v2) ((v1) > (v2))
98
99#define CV__CHECK(id, op, type, v1, v2, v1_str, v2_str, msg_str) do { \
100 if(CV__TEST_##op((v1), (v2))) ; else { \
101 CV__DEFINE_CHECK_CONTEXT(id, msg_str, cv::detail::TEST_ ## op, v1_str, v2_str); \
102 cv::detail::check_failed_ ## type((v1), (v2), CV__CHECK_LOCATION_VARNAME(id)); \
103 } \
104} while (0)
105
106#define CV__CHECK_CUSTOM_TEST(id, type, v, test_expr, v_str, test_expr_str, msg_str) do { \
107 if(!!(test_expr)) ; else { \
108 CV__DEFINE_CHECK_CONTEXT(id, msg_str, cv::detail::TEST_CUSTOM, v_str, test_expr_str); \
109 cv::detail::check_failed_ ## type((v), CV__CHECK_LOCATION_VARNAME(id)); \
110 } \
111} while (0)
112
113} // namespace
115
116
118#define CV_CheckEQ(v1, v2, msg) CV__CHECK(_, EQ, auto, v1, v2, #v1, #v2, msg)
119#define CV_CheckNE(v1, v2, msg) CV__CHECK(_, NE, auto, v1, v2, #v1, #v2, msg)
120#define CV_CheckLE(v1, v2, msg) CV__CHECK(_, LE, auto, v1, v2, #v1, #v2, msg)
121#define CV_CheckLT(v1, v2, msg) CV__CHECK(_, LT, auto, v1, v2, #v1, #v2, msg)
122#define CV_CheckGE(v1, v2, msg) CV__CHECK(_, GE, auto, v1, v2, #v1, #v2, msg)
123#define CV_CheckGT(v1, v2, msg) CV__CHECK(_, GT, auto, v1, v2, #v1, #v2, msg)
124
126#define CV_CheckTypeEQ(t1, t2, msg) CV__CHECK(_, EQ, MatType, t1, t2, #t1, #t2, msg)
128#define CV_CheckDepthEQ(d1, d2, msg) CV__CHECK(_, EQ, MatDepth, d1, d2, #d1, #d2, msg)
129
130#define CV_CheckChannelsEQ(c1, c2, msg) CV__CHECK(_, EQ, MatChannels, c1, c2, #c1, #c2, msg)
131
133#define CV_CheckType(t, test_expr, msg) CV__CHECK_CUSTOM_TEST(_, MatType, t, (test_expr), #t, #test_expr, msg)
134
136#define CV_CheckDepth(t, test_expr, msg) CV__CHECK_CUSTOM_TEST(_, MatDepth, t, (test_expr), #t, #test_expr, msg)
137
139#define CV_Check(v, test_expr, msg) CV__CHECK_CUSTOM_TEST(_, auto, v, (test_expr), #v, #test_expr, msg)
140
142#define CV_CheckTrue(v, msg) CV__CHECK_CUSTOM_TEST(_, true, v, v, #v, "", msg)
143
145#define CV_CheckFalse(v, msg) CV__CHECK_CUSTOM_TEST(_, false, v, (!(v)), #v, "", msg)
146
148// TODO define pretty-printers
149
150#ifndef NDEBUG
151#define CV_DbgCheck(v, test_expr, msg) CV__CHECK_CUSTOM_TEST(_, auto, v, (test_expr), #v, #test_expr, msg)
152#define CV_DbgCheckEQ(v1, v2, msg) CV__CHECK(_, EQ, auto, v1, v2, #v1, #v2, msg)
153#define CV_DbgCheckNE(v1, v2, msg) CV__CHECK(_, NE, auto, v1, v2, #v1, #v2, msg)
154#define CV_DbgCheckLE(v1, v2, msg) CV__CHECK(_, LE, auto, v1, v2, #v1, #v2, msg)
155#define CV_DbgCheckLT(v1, v2, msg) CV__CHECK(_, LT, auto, v1, v2, #v1, #v2, msg)
156#define CV_DbgCheckGE(v1, v2, msg) CV__CHECK(_, GE, auto, v1, v2, #v1, #v2, msg)
157#define CV_DbgCheckGT(v1, v2, msg) CV__CHECK(_, GT, auto, v1, v2, #v1, #v2, msg)
158#else
159#define CV_DbgCheck(v, test_expr, msg) do { } while (0)
160#define CV_DbgCheckEQ(v1, v2, msg) do { } while (0)
161#define CV_DbgCheckNE(v1, v2, msg) do { } while (0)
162#define CV_DbgCheckLE(v1, v2, msg) do { } while (0)
163#define CV_DbgCheckLT(v1, v2, msg) do { } while (0)
164#define CV_DbgCheckGE(v1, v2, msg) do { } while (0)
165#define CV_DbgCheckGT(v1, v2, msg) do { } while (0)
166#endif
167
168} // namespace
169
170#endif // OPENCV_CORE_CHECK_HPP
CvCmpFunc func
Definition core_c.h:1712
const char const char const char int line
Definition core_c.h:2623
int int type
Definition core_c.h:221
int depth
Definition core_c.h:100
#define CV_EXPORTS
Definition cvdef.h:435
#define CV_NORETURN
Definition cvdef.h:735
"black box" representation of the file storage associated with a file on disk.
Definition calib3d.hpp:441
CV_EXPORTS const char * depthToString(int depth)
CV_EXPORTS String typeToString(int type)