HighType.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_TYPETRAITS_HIGHTYPE_H_
36 #define _BLAZE_MATH_TYPETRAITS_HIGHTYPE_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/mpl/If.h>
47 #include <blaze/util/mpl/Or.h>
52 
53 
54 namespace blaze {
55 
56 //=================================================================================================
57 //
58 // CLASS DEFINITION
59 //
60 //=================================================================================================
61 
62 //*************************************************************************************************
132 template< typename T1, typename T2 >
133 struct HighType
134 {
135  private:
136  //**********************************************************************************************
138  struct Failure {
139  using Type = INVALID_TYPE;
140  };
142  //**********************************************************************************************
143 
144  //**********************************************************************************************
146  using Helper = HighType< Decay_<T1>, Decay_<T2> >;
148  //**********************************************************************************************
149 
150  public:
151  //**********************************************************************************************
153  using Type = typename If_< Or< IsConst<T1>, IsVolatile<T1>, IsReference<T1>
155  , Helper
156  , Failure >::Type;
158  //**********************************************************************************************
159 };
160 //*************************************************************************************************
161 
162 
163 //*************************************************************************************************
176 template< typename T1, typename T2 >
178 //*************************************************************************************************
179 
180 
181 
182 
183 //=================================================================================================
184 //
185 // HIGHTYPE SPECIALIZATION FOR IDENTICAL TYPES
186 //
187 //=================================================================================================
188 
189 //*************************************************************************************************
199 template< typename T >
200 struct HighType<T,T>
201 {
202  //**********************************************************************************************
203  using Type = Decay_<T>;
204  //**********************************************************************************************
205 };
207 //*************************************************************************************************
208 
209 
210 
211 
212 //=================================================================================================
213 //
214 // HIGHTYPE SPECIALIZATION MACRO
215 //
216 //=================================================================================================
217 
218 //*************************************************************************************************
225 #define BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION(T1,T2,HIGH) \
226  template<> \
227  struct HighType< T1, T2 > \
228  { \
229  using Type = HIGH; \
230  }
231 
232 //*************************************************************************************************
233 
234 
235 //*************************************************************************************************
242 #define BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( T1 ) \
243  template< typename T2 > \
244  struct HighType< T1, complex<T2> > \
245  { \
246  using Type = complex<T2>; \
247  }; \
248  template< typename T2 > \
249  struct HighType< complex<T2>, T1 > \
250  { \
251  using Type = complex<T2>; \
252  }
253 
254 //*************************************************************************************************
255 
256 
257 
258 
259 //=================================================================================================
260 //
261 // UNSIGNED CHAR SPECIALIZATIONS
262 //
263 //=================================================================================================
264 
265 //*************************************************************************************************
267 // Type 1 Type 2 High type
268 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , unsigned char , unsigned char );
269 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , char , char );
270 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , signed char , signed char );
271 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , wchar_t , wchar_t );
272 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , unsigned short, unsigned short );
273 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , short , short );
274 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , unsigned int , unsigned int );
275 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , int , int );
276 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , unsigned long , unsigned long );
277 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , long , long );
278 #if defined(_WIN64)
279 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , std::size_t , std::size_t );
280 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , std::ptrdiff_t, std::ptrdiff_t );
281 #endif
282 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , float , float );
283 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , double , double );
284 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , long double , long double );
286 //*************************************************************************************************
287 
288 
289 
290 
291 //=================================================================================================
292 //
293 // CHAR SPECIALIZATIONS
294 //
295 //=================================================================================================
296 
297 //*************************************************************************************************
299 // Type 1 Type 2 High type
300 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , unsigned char , char );
301 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , char , char );
302 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , signed char , signed char );
303 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , wchar_t , wchar_t );
304 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , unsigned short, unsigned short );
305 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , short , short );
306 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , unsigned int , unsigned int );
307 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , int , int );
308 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , unsigned long , unsigned long );
309 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , long , long );
310 #if defined(_WIN64)
311 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , std::size_t , std::size_t );
312 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , std::ptrdiff_t, std::ptrdiff_t );
313 #endif
314 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , float , float );
315 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , double , double );
316 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , long double , long double );
318 //*************************************************************************************************
319 
320 
321 
322 
323 //=================================================================================================
324 //
325 // SIGNED CHAR SPECIALIZATIONS
326 //
327 //=================================================================================================
328 
329 //*************************************************************************************************
331 // Type 1 Type 2 High type
332 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , unsigned char , signed char );
333 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , char , signed char );
334 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , signed char , signed char );
335 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , wchar_t , wchar_t );
336 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , unsigned short, unsigned short );
337 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , short , short );
338 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , unsigned int , unsigned int );
339 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , int , int );
340 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , unsigned long , unsigned long );
341 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , long , long );
342 #if defined(_WIN64)
343 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , std::size_t , std::size_t );
344 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , std::ptrdiff_t, std::ptrdiff_t );
345 #endif
346 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , float , float );
347 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , double , double );
348 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , long double , long double );
350 //*************************************************************************************************
351 
352 
353 
354 
355 //=================================================================================================
356 //
357 // WCHAR_T SPECIALIZATIONS
358 //
359 //=================================================================================================
360 
361 //*************************************************************************************************
363 // Type 1 Type 2 High type
364 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , unsigned char , wchar_t );
365 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , char , wchar_t );
366 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , signed char , wchar_t );
367 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , wchar_t , wchar_t );
368 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , unsigned short, unsigned short );
369 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , short , short );
370 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , unsigned int , unsigned int );
371 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , int , int );
372 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , unsigned long , unsigned long );
373 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , long , long );
374 #if defined(_WIN64)
375 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , std::size_t , std::size_t );
376 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , std::ptrdiff_t, std::ptrdiff_t );
377 #endif
378 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , float , float );
379 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , double , double );
380 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , long double , long double );
382 //*************************************************************************************************
383 
384 
385 
386 
387 //=================================================================================================
388 //
389 // UNSIGNED SHORT SPECIALIZATIONS
390 //
391 //=================================================================================================
392 
393 //*************************************************************************************************
395 // Type 1 Type 2 High type
396 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, unsigned char , unsigned short );
397 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, char , unsigned short );
398 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, signed char , unsigned short );
399 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, wchar_t , unsigned short );
400 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, unsigned short, unsigned short );
401 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, short , short );
402 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, unsigned int , unsigned int );
403 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, int , int );
404 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, unsigned long , unsigned long );
405 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, long , long );
406 #if defined(_WIN64)
407 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, std::size_t , std::size_t );
408 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, std::ptrdiff_t, std::ptrdiff_t );
409 #endif
410 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, float , float );
411 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, double , double );
412 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, long double , long double );
414 //*************************************************************************************************
415 
416 
417 
418 
419 //=================================================================================================
420 //
421 // SHORT SPECIALIZATIONS
422 //
423 //=================================================================================================
424 
425 //*************************************************************************************************
427 // Type 1 Type 2 High type
428 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , unsigned char , short );
429 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , char , short );
430 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , signed char , short );
431 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , wchar_t , short );
432 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , unsigned short, short );
433 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , short , short );
434 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , unsigned int , unsigned int );
435 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , int , int );
436 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , unsigned long , unsigned long );
437 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , long , long );
438 #if defined(_WIN64)
439 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , std::size_t , std::size_t );
440 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , std::ptrdiff_t, std::ptrdiff_t );
441 #endif
442 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , float , float );
443 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , double , double );
444 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , long double , long double );
446 //*************************************************************************************************
447 
448 
449 
450 
451 //=================================================================================================
452 //
453 // UNSIGNED INT SPECIALIZATIONS
454 //
455 //=================================================================================================
456 
457 //*************************************************************************************************
459 // Type 1 Type 2 High type
460 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , unsigned char , unsigned int );
461 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , char , unsigned int );
462 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , signed char , unsigned int );
463 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , wchar_t , unsigned int );
464 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , unsigned short, unsigned int );
465 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , short , unsigned int );
466 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , unsigned int , unsigned int );
467 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , int , int );
468 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , unsigned long , unsigned long );
469 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , long , long );
470 #if defined(_WIN64)
471 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , std::size_t , std::size_t );
472 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , std::ptrdiff_t, std::ptrdiff_t );
473 #endif
474 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , float , float );
475 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , double , double );
476 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , long double , long double );
478 //*************************************************************************************************
479 
480 
481 
482 
483 //=================================================================================================
484 //
485 // INT SPECIALIZATIONS
486 //
487 //=================================================================================================
488 
489 //*************************************************************************************************
491 // Type 1 Type 2 High type
492 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , unsigned char , int );
493 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , char , int );
494 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , signed char , int );
495 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , wchar_t , int );
496 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , unsigned short, int );
497 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , short , int );
498 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , unsigned int , int );
499 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , int , int );
500 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , unsigned long , unsigned long );
501 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , long , long );
502 #if defined(_WIN64)
503 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , std::size_t , std::size_t );
504 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , std::ptrdiff_t, std::ptrdiff_t );
505 #endif
506 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , float , float );
507 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , double , double );
508 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , long double , long double );
510 //*************************************************************************************************
511 
512 
513 
514 
515 //=================================================================================================
516 //
517 // UNSIGNED LONG SPECIALIZATIONS
518 //
519 //=================================================================================================
520 
521 //*************************************************************************************************
523 // Type 1 Type 2 High type
524 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , unsigned char , unsigned long );
525 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , char , unsigned long );
526 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , signed char , unsigned long );
527 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , wchar_t , unsigned long );
528 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , unsigned short, unsigned long );
529 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , short , unsigned long );
530 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , unsigned int , unsigned long );
531 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , int , unsigned long );
532 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , unsigned long , unsigned long );
533 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , long , long );
534 #if defined(_WIN64)
535 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , std::size_t , std::size_t );
536 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , std::ptrdiff_t, std::ptrdiff_t );
537 #endif
538 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , float , float );
539 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , double , double );
540 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , long double , long double );
542 //*************************************************************************************************
543 
544 
545 
546 
547 //=================================================================================================
548 //
549 // LONG SPECIALIZATIONS
550 //
551 //=================================================================================================
552 
553 //*************************************************************************************************
555 // Type 1 Type 2 High type
556 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , unsigned char , long );
557 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , char , long );
558 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , signed char , long );
559 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , wchar_t , long );
560 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , unsigned short, long );
561 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , short , long );
562 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , unsigned int , long );
563 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , int , long );
564 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , unsigned long , long );
565 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , long , long );
566 #if defined(_WIN64)
567 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , std::size_t , std::size_t );
568 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , std::ptrdiff_t, std::ptrdiff_t );
569 #endif
570 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , float , float );
571 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , double , double );
572 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , long double , long double );
574 //*************************************************************************************************
575 
576 
577 
578 
579 //=================================================================================================
580 //
581 // SIZE_T SPECIALIZATIONS
582 //
583 //=================================================================================================
584 
585 //*************************************************************************************************
586 #if defined(_WIN64)
587 
588 // Type 1 Type 2 High type
589 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , unsigned char , std::size_t );
590 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , char , std::size_t );
591 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , signed char , std::size_t );
592 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , wchar_t , std::size_t );
593 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , unsigned short, std::size_t );
594 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , short , std::size_t );
595 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , unsigned int , std::size_t );
596 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , int , std::size_t );
597 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , unsigned long , std::size_t );
598 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , long , std::size_t );
599 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , std::size_t , std::size_t );
600 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , std::ptrdiff_t, std::ptrdiff_t );
601 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , float , float );
602 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , double , double );
603 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , long double , long double );
605 #endif
606 //*************************************************************************************************
607 
608 
609 
610 
611 //=================================================================================================
612 //
613 // PTRDIFF_T SPECIALIZATIONS
614 //
615 //=================================================================================================
616 
617 //*************************************************************************************************
618 #if defined(_WIN64)
619 
620 // Type 1 Type 2 High type
621 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, unsigned char , std::ptrdiff_t );
622 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, char , std::ptrdiff_t );
623 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, signed char , std::ptrdiff_t );
624 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, wchar_t , std::ptrdiff_t );
625 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, unsigned short, std::ptrdiff_t );
626 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, short , std::ptrdiff_t );
627 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, unsigned int , std::ptrdiff_t );
628 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, int , std::ptrdiff_t );
629 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, unsigned long , std::ptrdiff_t );
630 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, long , std::ptrdiff_t );
631 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, std::size_t , std::ptrdiff_t );
632 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, std::ptrdiff_t, std::ptrdiff_t );
633 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, float , float );
634 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, double , double );
635 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, long double , long double );
637 #endif
638 //*************************************************************************************************
639 
640 
641 
642 
643 //=================================================================================================
644 //
645 // FLOAT SPECIALIZATIONS
646 //
647 //=================================================================================================
648 
649 //*************************************************************************************************
651 // Type 1 Type 2 High type
652 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , unsigned char , float );
653 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , char , float );
654 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , signed char , float );
655 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , wchar_t , float );
656 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , unsigned short, float );
657 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , short , float );
658 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , unsigned int , float );
659 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , int , float );
660 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , unsigned long , float );
661 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , long , float );
662 #if defined(_WIN64)
663 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , std::size_t , float );
664 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , std::ptrdiff_t, float );
665 #endif
666 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , float , float );
667 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , double , double );
668 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , long double , long double );
670 //*************************************************************************************************
671 
672 
673 
674 
675 //=================================================================================================
676 //
677 // DOUBLE SPECIALIZATIONS
678 //
679 //=================================================================================================
680 
681 //*************************************************************************************************
683 // Type 1 Type 2 High type
684 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , unsigned char , double );
685 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , char , double );
686 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , signed char , double );
687 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , wchar_t , double );
688 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , unsigned short, double );
689 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , short , double );
690 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , unsigned int , double );
691 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , int , double );
692 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , unsigned long , double );
693 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , long , double );
694 #if defined(_WIN64)
695 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , std::size_t , double );
696 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , std::ptrdiff_t, double );
697 #endif
698 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , float , double );
699 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , double , double );
700 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , long double , long double );
702 //*************************************************************************************************
703 
704 
705 
706 
707 //=================================================================================================
708 //
709 // LONG DOUBLE SPECIALIZATIONS
710 //
711 //=================================================================================================
712 
713 //*************************************************************************************************
715 // Type 1 Type 2 High type
716 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , unsigned char , long double );
717 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , char , long double );
718 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , signed char , long double );
719 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , wchar_t , long double );
720 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , unsigned short, long double );
721 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , short , long double );
722 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , unsigned int , long double );
723 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , int , long double );
724 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , unsigned long , long double );
725 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , long , long double );
726 #if defined(_WIN64)
727 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , std::size_t , long double );
728 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , std::ptrdiff_t, long double );
729 #endif
730 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , float , long double );
731 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , double , long double );
732 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , long double , long double );
734 //*************************************************************************************************
735 
736 
737 
738 
739 //=================================================================================================
740 //
741 // COMPLEX SPECIALIZATIONS
742 //
743 //=================================================================================================
744 
745 //*************************************************************************************************
747 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( unsigned char );
748 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( char );
749 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( signed char );
750 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( wchar_t );
751 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( unsigned short );
752 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( short );
753 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( unsigned int );
754 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( int );
755 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( unsigned long );
756 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( long );
757 #if defined(_WIN64)
758 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( std::size_t );
759 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t );
760 #endif
761 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( float );
762 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( double );
763 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( long double );
765 //*************************************************************************************************
766 
767 
768 //*************************************************************************************************
770 template< typename T >
771 struct HighType< complex<T>, complex<T> >
772 {
773  using Type = complex< Decay_<T> >;
774 };
776 //*************************************************************************************************
777 
778 
779 //*************************************************************************************************
781 template< typename T1, typename T2 >
782 struct HighType< complex<T1>, complex<T2> >
783 {
784  using Type = complex< typename HighType<T1,T2>::Type >;
785 };
787 //*************************************************************************************************
788 
789 } // namespace blaze
790 
791 #endif
typename HighType< T1, T2 >::Type HighType_
Auxiliary alias declaration for the HighType type trait.The HighType_ alias declaration provides a co...
Definition: HighType.h:177
Compile time check for volatile data types.The IsVolatile type trait tests whether or not the given t...
Definition: IsVolatile.h:75
typename Decay< T >::Type Decay_
Auxiliary alias declaration for the Decay type trait.The Decay_ alias declaration provides a convenie...
Definition: Decay.h:98
Header file for the IsVolatile type trait.
Header file for the Decay type trait.
Base template for the HighType type trait.
Definition: HighType.h:133
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for the If class template.
Header file for the Or class template.
Header file for the IsConst type trait.
Utility type for generic codes.
typename If< T1, T2, T3 >::Type If_
Auxiliary alias declaration for the If class template.The If_ alias declaration provides a convenient...
Definition: If.h:160
Header file for the IsReference type trait.
Compile time check for constant data types.The IsConst type trait tests whether or not the given temp...
Definition: IsConst.h:75
Compile time type check.This class tests whether the given template parameter T is a reference type (...
Definition: IsReference.h:75
Header file for the complex data type.