EstervQrCode 2.0.0
Library for qr code manipulation
Loading...
Searching...
No Matches
traits.hpp
1/*M///////////////////////////////////////////////////////////////////////////////////////
2//
3// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
4//
5// By downloading, copying, installing or using the software you agree to this license.
6// If you do not agree to this license, do not download, install,
7// copy or use the software.
8//
9//
10// License Agreement
11// For Open Source Computer Vision Library
12//
13// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
14// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
15// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
16// Third party copyrights are property of their respective owners.
17//
18// Redistribution and use in source and binary forms, with or without modification,
19// are permitted provided that the following conditions are met:
20//
21// * Redistribution's of source code must retain the above copyright notice,
22// this list of conditions and the following disclaimer.
23//
24// * Redistribution's in binary form must reproduce the above copyright notice,
25// this list of conditions and the following disclaimer in the documentation
26// and/or other materials provided with the distribution.
27//
28// * The name of the copyright holders may not be used to endorse or promote products
29// derived from this software without specific prior written permission.
30//
31// This software is provided by the copyright holders and contributors "as is" and
32// any express or implied warranties, including, but not limited to, the implied
33// warranties of merchantability and fitness for a particular purpose are disclaimed.
34// In no event shall the Intel Corporation or contributors be liable for any direct,
35// indirect, incidental, special, exemplary, or consequential damages
36// (including, but not limited to, procurement of substitute goods or services;
37// loss of use, data, or profits; or business interruption) however caused
38// and on any theory of liability, whether in contract, strict liability,
39// or tort (including negligence or otherwise) arising in any way out of
40// the use of this software, even if advised of the possibility of such damage.
41//
42//M*/
43
44#ifndef OPENCV_CORE_TRAITS_HPP
45#define OPENCV_CORE_TRAITS_HPP
46
47#include "opencv2/core/cvdef.h"
48
49namespace cv
50{
51
52//#define OPENCV_TRAITS_ENABLE_DEPRECATED
53
56
112template<typename _Tp> class DataType
113{
114public:
115#ifdef OPENCV_TRAITS_ENABLE_DEPRECATED
116 typedef _Tp value_type;
117 typedef value_type work_type;
118 typedef value_type channel_type;
119 typedef value_type vec_type;
120 enum { generic_type = 1,
121 depth = -1,
122 channels = 1,
123 fmt = 0,
125 };
126#endif
127};
128
129template<> class DataType<bool>
130{
131public:
132 typedef bool value_type;
133 typedef int work_type;
136 enum { generic_type = 0,
139 fmt = (int)'u',
141 };
142};
143
144template<> class DataType<uchar>
145{
146public:
148 typedef int work_type;
151 enum { generic_type = 0,
154 fmt = (int)'u',
156 };
157};
158
159template<> class DataType<schar>
160{
161public:
163 typedef int work_type;
166 enum { generic_type = 0,
169 fmt = (int)'c',
171 };
172};
173
174template<> class DataType<char>
175{
176public:
178 typedef int work_type;
181 enum { generic_type = 0,
184 fmt = (int)'c',
186 };
187};
188
189template<> class DataType<ushort>
190{
191public:
193 typedef int work_type;
196 enum { generic_type = 0,
199 fmt = (int)'w',
201 };
202};
203
204template<> class DataType<short>
205{
206public:
207 typedef short value_type;
208 typedef int work_type;
211 enum { generic_type = 0,
214 fmt = (int)'s',
216 };
217};
218
219template<> class DataType<int>
220{
221public:
222 typedef int value_type;
226 enum { generic_type = 0,
229 fmt = (int)'i',
231 };
232};
233
234template<> class DataType<float>
235{
236public:
237 typedef float value_type;
241 enum { generic_type = 0,
244 fmt = (int)'f',
246 };
247};
248
249template<> class DataType<double>
250{
251public:
252 typedef double value_type;
256 enum { generic_type = 0,
259 fmt = (int)'d',
261 };
262};
263
264template<> class DataType<hfloat>
265{
266public:
267 typedef hfloat value_type;
268 typedef float work_type;
271 enum { generic_type = 0,
274 fmt = (int)'h',
276 };
277};
278
284template<typename _Tp> class DataDepth
285{
286public:
287 enum
288 {
291 };
292};
293
294
295#ifdef OPENCV_TRAITS_ENABLE_DEPRECATED
296
297template<int _depth> class TypeDepth
298{
299#ifdef OPENCV_TRAITS_ENABLE_LEGACY_DEFAULTS
300 enum { depth = CV_USRTYPE1 };
301 typedef void value_type;
302#endif
303};
304
305template<> class TypeDepth<CV_8U>
306{
307 enum { depth = CV_8U };
308 typedef uchar value_type;
309};
310
311template<> class TypeDepth<CV_8S>
312{
313 enum { depth = CV_8S };
314 typedef schar value_type;
315};
316
317template<> class TypeDepth<CV_16U>
318{
319 enum { depth = CV_16U };
320 typedef ushort value_type;
321};
322
323template<> class TypeDepth<CV_16S>
324{
325 enum { depth = CV_16S };
326 typedef short value_type;
327};
328
329template<> class TypeDepth<CV_32S>
330{
331 enum { depth = CV_32S };
332 typedef int value_type;
333};
334
335template<> class TypeDepth<CV_32F>
336{
337 enum { depth = CV_32F };
338 typedef float value_type;
339};
340
341template<> class TypeDepth<CV_64F>
342{
343 enum { depth = CV_64F };
344 typedef double value_type;
345};
346
347template<> class TypeDepth<CV_16F>
348{
349 enum { depth = CV_16F };
350 typedef hfloat value_type;
351};
352
353#endif
354
356
357namespace traits {
358
359namespace internal {
360#define CV_CREATE_MEMBER_CHECK(X) \
361template<typename T> class CheckMember_##X { \
362 struct Fallback { int X; }; \
363 struct Derived : T, Fallback { }; \
364 template<typename U, U> struct Check; \
365 typedef char CV_NO[1]; \
366 typedef char CV_YES[2]; \
367 template<typename U> static CV_NO & func(Check<int Fallback::*, &U::X> *); \
368 template<typename U> static CV_YES & func(...); \
369public: \
370 typedef CheckMember_##X type; \
371 enum { value = sizeof(func<Derived>(0)) == sizeof(CV_YES) }; \
372};
373
374CV_CREATE_MEMBER_CHECK(fmt)
375CV_CREATE_MEMBER_CHECK(type)
376
377} // namespace internal
378
379
380template<typename T>
381struct Depth
382{ enum { value = DataType<T>::depth }; };
383
384template<typename T>
385struct Type
386{ enum { value = DataType<T>::type }; };
387
389template<typename T, bool available = internal::CheckMember_type< DataType<T> >::value >
390struct SafeType {};
391
392template<typename T>
393struct SafeType<T, false>
394{ enum { value = -1 }; };
395
396template<typename T>
397struct SafeType<T, true>
398{ enum { value = Type<T>::value }; };
399
400
401template<typename T, bool available = internal::CheckMember_fmt< DataType<T> >::value >
402struct SafeFmt {};
403
404template<typename T>
405struct SafeFmt<T, false>
406{ enum { fmt = 0 }; };
407
408template<typename T>
409struct SafeFmt<T, true>
410{ enum { fmt = DataType<T>::fmt }; };
411
412
413} // namespace
414
415} // cv
416
417#endif // OPENCV_CORE_TRAITS_HPP
A helper class for cv::DataType.
Definition traits.hpp:285
@ value
Definition traits.hpp:289
@ fmt
Definition traits.hpp:290
int work_type
Definition traits.hpp:133
value_type vec_type
Definition traits.hpp:135
value_type channel_type
Definition traits.hpp:134
bool value_type
Definition traits.hpp:132
value_type channel_type
Definition traits.hpp:179
int work_type
Definition traits.hpp:178
schar value_type
Definition traits.hpp:177
value_type vec_type
Definition traits.hpp:180
value_type channel_type
Definition traits.hpp:254
value_type vec_type
Definition traits.hpp:255
value_type work_type
Definition traits.hpp:253
double value_type
Definition traits.hpp:252
value_type channel_type
Definition traits.hpp:239
value_type work_type
Definition traits.hpp:238
float value_type
Definition traits.hpp:237
value_type vec_type
Definition traits.hpp:240
float work_type
Definition traits.hpp:268
value_type channel_type
Definition traits.hpp:269
hfloat value_type
Definition traits.hpp:267
value_type vec_type
Definition traits.hpp:270
value_type vec_type
Definition traits.hpp:225
value_type channel_type
Definition traits.hpp:224
int value_type
Definition traits.hpp:222
value_type work_type
Definition traits.hpp:223
value_type channel_type
Definition traits.hpp:164
int work_type
Definition traits.hpp:163
value_type vec_type
Definition traits.hpp:165
schar value_type
Definition traits.hpp:162
short value_type
Definition traits.hpp:207
value_type vec_type
Definition traits.hpp:210
value_type channel_type
Definition traits.hpp:209
int work_type
Definition traits.hpp:208
value_type channel_type
Definition traits.hpp:149
int work_type
Definition traits.hpp:148
value_type vec_type
Definition traits.hpp:150
uchar value_type
Definition traits.hpp:147
int work_type
Definition traits.hpp:193
value_type vec_type
Definition traits.hpp:195
ushort value_type
Definition traits.hpp:192
value_type channel_type
Definition traits.hpp:194
Template "trait" class for OpenCV primitive data types.
Definition traits.hpp:113
InputArrayOfArrays InputArrayOfArrays InputOutputArray InputOutputArray InputOutputArray InputOutputArray Size InputOutputArray InputOutputArray T
Definition calib3d.hpp:1867
int CvScalar value
Definition core_c.h:720
int int channels
Definition core_c.h:100
int int type
Definition core_c.h:221
int depth
Definition core_c.h:100
signed char schar
Definition interface.h:48
#define CV_8S
Definition interface.h:74
#define CV_16F
Definition interface.h:80
#define CV_64F
Definition interface.h:79
#define CV_8U
Definition interface.h:73
#define CV_32S
Definition interface.h:77
#define CV_32F
Definition interface.h:78
unsigned char uchar
Definition interface.h:51
#define CV_16S
Definition interface.h:76
#define CV_MAKETYPE(depth, cn)
Definition interface.h:85
unsigned short ushort
Definition interface.h:52
#define CV_USRTYPE1
Definition interface.h:67
#define CV_16U
Definition interface.h:75
"black box" representation of the file storage associated with a file on disk.
Definition calib3d.hpp:441
Definition traits.hpp:382
@ value
Definition traits.hpp:382
Definition traits.hpp:402
Definition traits.hpp:390
Definition traits.hpp:386
@ value
Definition traits.hpp:386