All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MathTrait.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_TRAITS_MATHTRAIT_H_
36 #define _BLAZE_MATH_TRAITS_MATHTRAIT_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
43 #include <cstddef>
44 #include <blaze/util/Complex.h>
45 #include <blaze/util/InvalidType.h>
46 #include <blaze/util/SelectType.h>
52 
53 
54 namespace blaze {
55 
56 //=================================================================================================
57 //
58 // CLASS DEFINITION
59 //
60 //=================================================================================================
61 
62 //*************************************************************************************************
126 template< typename T1, typename T2 >
127 struct MathTrait
128 {
129  private:
130  //**********************************************************************************************
132  struct Failure {
133  typedef INVALID_TYPE HighType;
134  typedef INVALID_TYPE LowType;
135  };
137  //**********************************************************************************************
138 
139  //**********************************************************************************************
144  //**********************************************************************************************
145 
146  //**********************************************************************************************
148  typedef typename RemoveReference< typename RemoveCV<T1>::Type >::Type Type1;
149  typedef typename RemoveReference< typename RemoveCV<T2>::Type >::Type Type2;
150  typedef MathTrait<Type1,Type2> Helper;
152  //**********************************************************************************************
153 
154  public:
155  //**********************************************************************************************
160  //**********************************************************************************************
161 };
162 //*************************************************************************************************
163 
164 
165 
166 
167 //=================================================================================================
168 //
169 // MATHTRAIT SPECIALIZATION MACRO
170 //
171 //=================================================================================================
172 
173 //*************************************************************************************************
180 #define BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION(T1,T2,HIGH,LOW) \
181  template<> \
182  struct MathTrait< T1, T2 > \
183  { \
184  typedef HIGH HighType; \
185  typedef LOW LowType; \
186  }
187 
188 //*************************************************************************************************
189 
190 
191 //*************************************************************************************************
198 #define BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( T1 ) \
199  template< typename T2 > \
200  struct MathTrait< T1, complex<T2> > \
201  { \
202  typedef complex<T2> HighType; \
203  typedef T1 LowType; \
204  }; \
205  template< typename T2 > \
206  struct MathTrait< complex<T2>, T1 > \
207  { \
208  typedef complex<T2> HighType; \
209  typedef T1 LowType; \
210  }
211 
212 //*************************************************************************************************
213 
214 
215 
216 
217 //=================================================================================================
218 //
219 // UNSIGNED CHAR SPECIALIZATIONS
220 //
221 //=================================================================================================
222 
223 //*************************************************************************************************
225 // Type 1 Type 2 High type Low type
226 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , unsigned char , unsigned char , unsigned char );
227 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , char , char , unsigned char );
228 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , signed char , signed char , unsigned char );
229 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , wchar_t , wchar_t , unsigned char );
230 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , unsigned short, unsigned short, unsigned char );
231 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , short , short , unsigned char );
232 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , unsigned int , unsigned int , unsigned char );
233 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , int , int , unsigned char );
234 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , unsigned long , unsigned long , unsigned char );
235 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , long , long , unsigned char );
236 #if defined(_WIN64)
237 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , std::size_t , std::size_t , unsigned char );
238 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , std::ptrdiff_t, std::ptrdiff_t, unsigned char );
239 #endif
240 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , float , float , unsigned char );
241 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , double , double , unsigned char );
242 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , long double , long double , unsigned char );
244 //*************************************************************************************************
245 
246 
247 
248 
249 //=================================================================================================
250 //
251 // CHAR SPECIALIZATIONS
252 //
253 //=================================================================================================
254 
255 //*************************************************************************************************
257 // Type 1 Type 2 High type Low type
258 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , unsigned char , char , unsigned char );
259 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , char , char , char );
260 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , signed char , signed char , char );
261 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , wchar_t , wchar_t , char );
262 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , unsigned short, unsigned short, char );
263 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , short , short , char );
264 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , unsigned int , unsigned int , char );
265 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , int , int , char );
266 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , unsigned long , unsigned long , char );
267 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , long , long , char );
268 #if defined(_WIN64)
269 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , std::size_t , std::size_t , char );
270 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , std::ptrdiff_t, std::ptrdiff_t, char );
271 #endif
272 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , float , float , char );
273 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , double , double , char );
274 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , long double , long double , char );
276 //*************************************************************************************************
277 
278 
279 
280 
281 //=================================================================================================
282 //
283 // SIGNED CHAR SPECIALIZATIONS
284 //
285 //=================================================================================================
286 
287 //*************************************************************************************************
289 // Type 1 Type 2 High type Low type
290 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , unsigned char , signed char , unsigned char );
291 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , char , signed char , char );
292 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , signed char , signed char , signed char );
293 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , wchar_t , wchar_t , signed char );
294 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , unsigned short, unsigned short, signed char );
295 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , short , short , signed char );
296 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , unsigned int , unsigned int , signed char );
297 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , int , int , signed char );
298 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , unsigned long , unsigned long , signed char );
299 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , long , long , signed char );
300 #if defined(_WIN64)
301 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , std::size_t , std::size_t , signed char );
302 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , std::ptrdiff_t, std::ptrdiff_t, signed char );
303 #endif
304 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , float , float , signed char );
305 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , double , double , signed char );
306 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , long double , long double , signed char );
308 //*************************************************************************************************
309 
310 
311 
312 
313 //=================================================================================================
314 //
315 // WCHAR_T SPECIALIZATIONS
316 //
317 //=================================================================================================
318 
319 //*************************************************************************************************
321 // Type 1 Type 2 High type Low type
322 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , unsigned char , wchar_t , unsigned char );
323 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , char , wchar_t , char );
324 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , signed char , wchar_t , signed char );
325 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , wchar_t , wchar_t , wchar_t );
326 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , unsigned short, unsigned short, wchar_t );
327 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , short , short , wchar_t );
328 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , unsigned int , unsigned int , wchar_t );
329 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , int , int , wchar_t );
330 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , unsigned long , unsigned long , wchar_t );
331 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , long , long , wchar_t );
332 #if defined(_WIN64)
333 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , std::size_t , std::size_t , wchar_t );
334 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , std::ptrdiff_t, std::ptrdiff_t, wchar_t );
335 #endif
336 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , float , float , wchar_t );
337 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , double , double , wchar_t );
338 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , long double , long double , wchar_t );
340 //*************************************************************************************************
341 
342 
343 
344 
345 //=================================================================================================
346 //
347 // UNSIGNED SHORT SPECIALIZATIONS
348 //
349 //=================================================================================================
350 
351 //*************************************************************************************************
353 // Type 1 Type 2 High type Low type
354 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, unsigned char , unsigned short, unsigned char );
355 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, char , unsigned short, char );
356 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, signed char , unsigned short, signed char );
357 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, wchar_t , unsigned short, wchar_t );
358 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, unsigned short, unsigned short, unsigned short );
359 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, short , short , unsigned short );
360 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, unsigned int , unsigned int , unsigned short );
361 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, int , int , unsigned short );
362 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, unsigned long , unsigned long , unsigned short );
363 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, long , long , unsigned short );
364 #if defined(_WIN64)
365 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, std::size_t , std::size_t , unsigned short );
366 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, std::ptrdiff_t, std::ptrdiff_t, unsigned short );
367 #endif
368 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, float , float , unsigned short );
369 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, double , double , unsigned short );
370 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, long double , long double , unsigned short );
372 //*************************************************************************************************
373 
374 
375 
376 
377 //=================================================================================================
378 //
379 // SHORT SPECIALIZATIONS
380 //
381 //=================================================================================================
382 
383 //*************************************************************************************************
385 // Type 1 Type 2 High type Low type
386 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , unsigned char , short , unsigned char );
387 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , char , short , char );
388 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , signed char , short , signed char );
389 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , wchar_t , short , wchar_t );
390 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , unsigned short, short , unsigned short );
391 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , short , short , short );
392 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , unsigned int , unsigned int , short );
393 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , int , int , short );
394 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , unsigned long , unsigned long , short );
395 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , long , long , short );
396 #if defined(_WIN64)
397 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , std::size_t , std::size_t , short );
398 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , std::ptrdiff_t, std::ptrdiff_t, short );
399 #endif
400 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , float , float , short );
401 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , double , double , short );
402 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , long double , long double , short );
404 //*************************************************************************************************
405 
406 
407 
408 
409 //=================================================================================================
410 //
411 // UNSIGNED INT SPECIALIZATIONS
412 //
413 //=================================================================================================
414 
415 //*************************************************************************************************
417 // Type 1 Type 2 High type Low type
418 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , unsigned char , unsigned int , unsigned char );
419 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , char , unsigned int , char );
420 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , signed char , unsigned int , signed char );
421 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , wchar_t , unsigned int , wchar_t );
422 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , unsigned short, unsigned int , unsigned short );
423 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , short , unsigned int , short );
424 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , unsigned int , unsigned int , unsigned int );
425 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , int , int , unsigned int );
426 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , unsigned long , unsigned long , unsigned int );
427 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , long , long , unsigned int );
428 #if defined(_WIN64)
429 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , std::size_t , std::size_t , unsigned int );
430 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , std::ptrdiff_t, std::ptrdiff_t, unsigned int );
431 #endif
432 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , float , float , unsigned int );
433 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , double , double , unsigned int );
434 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , long double , long double , unsigned int );
436 //*************************************************************************************************
437 
438 
439 
440 
441 //=================================================================================================
442 //
443 // INT SPECIALIZATIONS
444 //
445 //=================================================================================================
446 
447 //*************************************************************************************************
449 // Type 1 Type 2 High type Low type
450 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , unsigned char , int , unsigned char );
451 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , char , int , wchar_t );
452 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , signed char , int , signed char );
453 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , wchar_t , int , wchar_t );
454 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , unsigned short, int , unsigned short );
455 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , short , int , short );
456 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , unsigned int , int , unsigned int );
457 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , int , int , int );
458 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , unsigned long , unsigned long , int );
459 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , long , long , int );
460 #if defined(_WIN64)
461 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , std::size_t , std::size_t , int );
462 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , std::ptrdiff_t, std::ptrdiff_t, int );
463 #endif
464 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , float , float , int );
465 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , double , double , int );
466 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , long double , long double , int );
468 //*************************************************************************************************
469 
470 
471 
472 
473 //=================================================================================================
474 //
475 // UNSIGNED LONG SPECIALIZATIONS
476 //
477 //=================================================================================================
478 
479 //*************************************************************************************************
481 // Type 1 Type 2 High type Low type
482 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , unsigned char , unsigned long , unsigned char );
483 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , char , unsigned long , char );
484 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , signed char , unsigned long , signed char );
485 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , wchar_t , unsigned long , wchar_t );
486 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , unsigned short, unsigned long , unsigned short );
487 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , short , unsigned long , short );
488 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , unsigned int , unsigned long , unsigned int );
489 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , int , unsigned long , int );
490 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , unsigned long , unsigned long , unsigned long );
491 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , long , long , unsigned long );
492 #if defined(_WIN64)
493 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , std::size_t , std::size_t , unsigned long );
494 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , std::ptrdiff_t, std::ptrdiff_t, unsigned long );
495 #endif
496 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , float , float , unsigned long );
497 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , double , double , unsigned long );
498 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , long double , long double , unsigned long );
500 //*************************************************************************************************
501 
502 
503 
504 
505 //=================================================================================================
506 //
507 // LONG SPECIALIZATIONS
508 //
509 //=================================================================================================
510 
511 //*************************************************************************************************
513 // Type 1 Type 2 High type Low type
514 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , unsigned char , long , unsigned char );
515 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , char , long , char );
516 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , signed char , long , signed char );
517 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , wchar_t , long , wchar_t );
518 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , unsigned short, long , unsigned short );
519 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , short , long , short );
520 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , unsigned int , long , unsigned int );
521 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , int , long , int );
522 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , unsigned long , long , unsigned long );
523 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , long , long , long );
524 #if defined(_WIN64)
525 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , std::size_t , std::size_t , long );
526 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , std::ptrdiff_t, std::ptrdiff_t, long );
527 #endif
528 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , float , float , long );
529 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , double , double , long );
530 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , long double , long double , long );
532 //*************************************************************************************************
533 
534 
535 
536 
537 //=================================================================================================
538 //
539 // SIZE_T SPECIALIZATIONS
540 //
541 //=================================================================================================
542 
543 //*************************************************************************************************
544 #if defined(_WIN64)
545 
546 // Type 1 Type 2 High type Low type
547 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , unsigned char , std::size_t , unsigned char );
548 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , char , std::size_t , char );
549 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , signed char , std::size_t , signed char );
550 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , wchar_t , std::size_t , wchar_t );
551 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , unsigned short, std::size_t , unsigned short );
552 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , short , std::size_t , short );
553 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , unsigned int , std::size_t , unsigned int );
554 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , int , std::size_t , int );
555 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , unsigned long , std::size_t , unsigned long );
556 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , long , std::size_t , long );
557 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , std::size_t , std::size_t , std::size_t );
558 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , std::ptrdiff_t, std::ptrdiff_t, std::size_t );
559 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , float , float , std::size_t );
560 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , double , double , std::size_t );
561 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , long double , long double , std::size_t );
563 #endif
564 //*************************************************************************************************
565 
566 
567 
568 
569 //=================================================================================================
570 //
571 // PTRDIFF_T SPECIALIZATIONS
572 //
573 //=================================================================================================
574 
575 //*************************************************************************************************
576 #if defined(_WIN64)
577 
578 // Type 1 Type 2 High type Low type
579 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned char , std::ptrdiff_t, unsigned char );
580 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, char , std::ptrdiff_t, char );
581 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, signed char , std::ptrdiff_t, signed char );
582 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, wchar_t , std::ptrdiff_t, wchar_t );
583 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned short, std::ptrdiff_t, unsigned short );
584 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, short , std::ptrdiff_t, short );
585 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned int , std::ptrdiff_t, unsigned int );
586 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, int , std::ptrdiff_t, int );
587 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned long , std::ptrdiff_t, unsigned long );
588 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, long , std::ptrdiff_t, long );
589 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, std::size_t , std::ptrdiff_t, std::size_t );
590 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, std::ptrdiff_t, std::ptrdiff_t, std::ptrdiff_t );
591 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, float , float , std::ptrdiff_t );
592 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, double , double , std::ptrdiff_t );
593 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, long double , long double , std::ptrdiff_t );
595 #endif
596 //*************************************************************************************************
597 
598 
599 
600 
601 //=================================================================================================
602 //
603 // FLOAT SPECIALIZATIONS
604 //
605 //=================================================================================================
606 
607 //*************************************************************************************************
609 // Type 1 Type 2 High type Low type
610 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , unsigned char , float , unsigned char );
611 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , char , float , char );
612 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , signed char , float , signed char );
613 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , wchar_t , float , wchar_t );
614 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , unsigned short, float , unsigned short );
615 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , short , float , short );
616 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , unsigned int , float , unsigned int );
617 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , int , float , int );
618 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , unsigned long , float , unsigned long );
619 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , long , float , long );
620 #if defined(_WIN64)
621 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , std::size_t , float , std::size_t );
622 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , std::ptrdiff_t, float , std::ptrdiff_t );
623 #endif
624 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , float , float , float );
625 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , double , double , float );
626 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , long double , long double , float );
628 //*************************************************************************************************
629 
630 
631 
632 
633 //=================================================================================================
634 //
635 // DOUBLE SPECIALIZATIONS
636 //
637 //=================================================================================================
638 
639 //*************************************************************************************************
641 // Type 1 Type 2 High type Low type
642 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , unsigned char , double , unsigned char );
643 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , char , double , char );
644 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , signed char , double , signed char );
645 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , wchar_t , double , wchar_t );
646 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , unsigned short, double , unsigned short );
647 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , short , double , short );
648 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , unsigned int , double , unsigned int );
649 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , int , double , int );
650 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , unsigned long , double , unsigned long );
651 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , long , double , long );
652 #if defined(_WIN64)
653 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , std::size_t , double , std::size_t );
654 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , std::ptrdiff_t, double , std::ptrdiff_t );
655 #endif
656 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , float , double , float );
657 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , double , double , double );
658 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , long double , long double , double );
660 //*************************************************************************************************
661 
662 
663 
664 
665 //=================================================================================================
666 //
667 // LONG DOUBLE SPECIALIZATIONS
668 //
669 //=================================================================================================
670 
671 //*************************************************************************************************
673 // Type 1 Type 2 High type Low type
674 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , unsigned char , long double , unsigned char );
675 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , char , long double , char );
676 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , signed char , long double , signed char );
677 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , wchar_t , long double , wchar_t );
678 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , unsigned short, long double , unsigned short );
679 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , short , long double , short );
680 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , unsigned int , long double , unsigned int );
681 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , int , long double , int );
682 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , unsigned long , long double , unsigned long );
683 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , long , long double , long );
684 #if defined(_WIN64)
685 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , std::size_t , long double , std::size_t );
686 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , std::ptrdiff_t, long double , std::ptrdiff_t );
687 #endif
688 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , float , long double , float );
689 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , double , long double , double );
690 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , long double , long double , long double );
692 //*************************************************************************************************
693 
694 
695 
696 
697 //=================================================================================================
698 //
699 // COMPLEX SPECIALIZATIONS
700 //
701 //=================================================================================================
702 
703 //*************************************************************************************************
705 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( unsigned char );
706 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( char );
707 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( signed char );
708 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( wchar_t );
709 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( unsigned short );
710 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( short );
711 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( unsigned int );
712 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( int );
713 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( unsigned long );
714 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( long );
715 #if defined(_WIN64)
716 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( std::size_t );
717 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t );
718 #endif
719 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( float );
720 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( double );
721 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( long double );
723 //*************************************************************************************************
724 
725 
726 //*************************************************************************************************
728 template< typename T1, typename T2 >
729 struct MathTrait< complex<T1>, complex<T2> >
730 {
731  typedef complex<typename MathTrait<T1,T2>::HighType> HighType;
732  typedef complex<typename MathTrait<T1,T2>::LowType> LowType;
733 };
735 //*************************************************************************************************
736 
737 } // namespace blaze
738 
739 #endif
Compile time check for volatile data types.The IsVolatile type trait tests whether or not the given t...
Definition: IsVolatile.h:94
Header file for the RemoveCV type trait.
Header file for the IsVolatile type trait.
Base template for the MathTrait class.
Definition: MathTrait.h:127
Compile time type selection.The SelectType class template selects one of the two given types T1 and T...
Definition: SelectType.h:59
Header file for the SelectType class template.
Removal of reference modifiers.The RemoveCV type trait removes any reference modifiers from the given...
Definition: RemoveReference.h:69
Header file for the IsConst type trait.
Utility type for generic codes.
Header file for the IsReference type trait.
Header file for the RemoveReference type trait.
Compile time check for constant data types.The IsConst type trait tests whether or not the given temp...
Definition: IsConst.h:94
Compile time type check.This class tests whether the given template parameter T is a reference type (...
Definition: IsReference.h:94
Header file for the complex data type.