EstervQrCode 1.1.1
Library for qr code manipulation
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 
49 namespace cv
50 {
51 
52 //#define OPENCV_TRAITS_ENABLE_DEPRECATED
53 
56 
112 template<typename _Tp> class DataType
113 {
114 public:
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 
129 template<> class DataType<bool>
130 {
131 public:
132  typedef bool value_type;
133  typedef int work_type;
136  enum { generic_type = 0,
138  channels = 1,
139  fmt = (int)'u',
141  };
142 };
143 
144 template<> class DataType<uchar>
145 {
146 public:
147  typedef uchar value_type;
148  typedef int work_type;
151  enum { generic_type = 0,
153  channels = 1,
154  fmt = (int)'u',
156  };
157 };
158 
159 template<> class DataType<schar>
160 {
161 public:
162  typedef schar value_type;
163  typedef int work_type;
166  enum { generic_type = 0,
168  channels = 1,
169  fmt = (int)'c',
171  };
172 };
173 
174 template<> class DataType<char>
175 {
176 public:
177  typedef schar value_type;
178  typedef int work_type;
181  enum { generic_type = 0,
183  channels = 1,
184  fmt = (int)'c',
186  };
187 };
188 
189 template<> class DataType<ushort>
190 {
191 public:
193  typedef int work_type;
196  enum { generic_type = 0,
198  channels = 1,
199  fmt = (int)'w',
201  };
202 };
203 
204 template<> class DataType<short>
205 {
206 public:
207  typedef short value_type;
208  typedef int work_type;
211  enum { generic_type = 0,
213  channels = 1,
214  fmt = (int)'s',
216  };
217 };
218 
219 template<> class DataType<int>
220 {
221 public:
222  typedef int value_type;
226  enum { generic_type = 0,
228  channels = 1,
229  fmt = (int)'i',
231  };
232 };
233 
234 template<> class DataType<float>
235 {
236 public:
237  typedef float value_type;
241  enum { generic_type = 0,
243  channels = 1,
244  fmt = (int)'f',
246  };
247 };
248 
249 template<> class DataType<double>
250 {
251 public:
252  typedef double value_type;
256  enum { generic_type = 0,
258  channels = 1,
259  fmt = (int)'d',
261  };
262 };
263 
264 template<> class DataType<hfloat>
265 {
266 public:
267  typedef hfloat value_type;
268  typedef float work_type;
271  enum { generic_type = 0,
273  channels = 1,
274  fmt = (int)'h',
276  };
277 };
278 
284 template<typename _Tp> class DataDepth
285 {
286 public:
287  enum
288  {
291  };
292 };
293 
294 
295 #ifdef OPENCV_TRAITS_ENABLE_DEPRECATED
296 
297 template<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 
305 template<> class TypeDepth<CV_8U>
306 {
307  enum { depth = CV_8U };
308  typedef uchar value_type;
309 };
310 
311 template<> class TypeDepth<CV_8S>
312 {
313  enum { depth = CV_8S };
314  typedef schar value_type;
315 };
316 
317 template<> class TypeDepth<CV_16U>
318 {
319  enum { depth = CV_16U };
320  typedef ushort value_type;
321 };
322 
323 template<> class TypeDepth<CV_16S>
324 {
325  enum { depth = CV_16S };
326  typedef short value_type;
327 };
328 
329 template<> class TypeDepth<CV_32S>
330 {
331  enum { depth = CV_32S };
332  typedef int value_type;
333 };
334 
335 template<> class TypeDepth<CV_32F>
336 {
337  enum { depth = CV_32F };
338  typedef float value_type;
339 };
340 
341 template<> class TypeDepth<CV_64F>
342 {
343  enum { depth = CV_64F };
344  typedef double value_type;
345 };
346 
347 template<> class TypeDepth<CV_16F>
348 {
349  enum { depth = CV_16F };
350  typedef hfloat value_type;
351 };
352 
353 #endif
354 
356 
357 namespace traits {
358 
359 namespace internal {
360 #define CV_CREATE_MEMBER_CHECK(X) \
361 template<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(...); \
369 public: \
370  typedef CheckMember_##X type; \
371  enum { value = sizeof(func<Derived>(0)) == sizeof(CV_YES) }; \
372 };
373 
374 CV_CREATE_MEMBER_CHECK(fmt)
375 CV_CREATE_MEMBER_CHECK(type)
376 
377 } // namespace internal
378 
379 
380 template<typename T>
381 struct Depth
382 { enum { value = DataType<T>::depth }; };
383 
384 template<typename T>
385 struct Type
386 { enum { value = DataType<T>::type }; };
387 
389 template<typename T, bool available = internal::CheckMember_type< DataType<T> >::value >
390 struct SafeType {};
391 
392 template<typename T>
393 struct SafeType<T, false>
394 { enum { value = -1 }; };
395 
396 template<typename T>
397 struct SafeType<T, true>
398 { enum { value = Type<T>::value }; };
399 
400 
401 template<typename T, bool available = internal::CheckMember_fmt< DataType<T> >::value >
402 struct SafeFmt {};
403 
404 template<typename T>
405 struct SafeFmt<T, false>
406 { enum { fmt = 0 }; };
407 
408 template<typename T>
409 struct 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