LowType.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_TYPETRAITS_LOWTYPE_H_
36 #define _BLAZE_MATH_TYPETRAITS_LOWTYPE_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 LowType
134 {
135  private:
136  //**********************************************************************************************
138  struct Failure {
139  using Type = INVALID_TYPE;
140  };
142  //**********************************************************************************************
143 
144  //**********************************************************************************************
146  using Helper = LowType< 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 // LOWTYPE SPECIALIZATION FOR IDENTICAL TYPES
186 //
187 //=================================================================================================
188 
189 //*************************************************************************************************
198 template< typename T >
199 struct LowType<T,T>
200 {
201  //**********************************************************************************************
202  using Type = Decay_<T>;
203  //**********************************************************************************************
204 };
206 //*************************************************************************************************
207 
208 
209 
210 
211 //=================================================================================================
212 //
213 // LOWTYPE SPECIALIZATION MACRO
214 //
215 //=================================================================================================
216 
217 //*************************************************************************************************
224 #define BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION(T1,T2,LOW) \
225  template<> \
226  struct LowType< T1, T2 > \
227  { \
228  using Type = LOW; \
229  }
230 
231 //*************************************************************************************************
232 
233 
234 //*************************************************************************************************
241 #define BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( T1 ) \
242  template< typename T2 > \
243  struct LowType< T1, complex<T2> > \
244  { \
245  using Type = T1; \
246  }; \
247  template< typename T2 > \
248  struct LowType< complex<T2>, T1 > \
249  { \
250  using Type = T1; \
251  }
252 
253 //*************************************************************************************************
254 
255 
256 
257 
258 //=================================================================================================
259 //
260 // UNSIGNED CHAR SPECIALIZATIONS
261 //
262 //=================================================================================================
263 
264 //*************************************************************************************************
266 // Type 1 Type 2 Low type
267 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , unsigned char , unsigned char );
268 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , char , unsigned char );
269 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , signed char , unsigned char );
270 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , wchar_t , unsigned char );
271 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , unsigned short, unsigned char );
272 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , short , unsigned char );
273 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , unsigned int , unsigned char );
274 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , int , unsigned char );
275 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , unsigned long , unsigned char );
276 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , long , unsigned char );
277 #if defined(_WIN64)
278 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , std::size_t , unsigned char );
279 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , std::ptrdiff_t, unsigned char );
280 #endif
281 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , float , unsigned char );
282 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , double , unsigned char );
283 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned char , long double , unsigned char );
285 //*************************************************************************************************
286 
287 
288 
289 
290 //=================================================================================================
291 //
292 // CHAR SPECIALIZATIONS
293 //
294 //=================================================================================================
295 
296 //*************************************************************************************************
298 // Type 1 Type 2 Low type
299 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , unsigned char , unsigned char );
300 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , char , char );
301 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , signed char , char );
302 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , wchar_t , char );
303 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , unsigned short, char );
304 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , short , char );
305 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , unsigned int , char );
306 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , int , char );
307 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , unsigned long , char );
308 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , long , char );
309 #if defined(_WIN64)
310 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , std::size_t , char );
311 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , std::ptrdiff_t, char );
312 #endif
313 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , float , char );
314 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , double , char );
315 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( char , long double , char );
317 //*************************************************************************************************
318 
319 
320 
321 
322 //=================================================================================================
323 //
324 // SIGNED CHAR SPECIALIZATIONS
325 //
326 //=================================================================================================
327 
328 //*************************************************************************************************
330 // Type 1 Type 2 Low type
331 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , unsigned char , unsigned char );
332 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , char , char );
333 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , signed char , signed char );
334 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , wchar_t , signed char );
335 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , unsigned short, signed char );
336 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , short , signed char );
337 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , unsigned int , signed char );
338 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , int , signed char );
339 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , unsigned long , signed char );
340 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , long , signed char );
341 #if defined(_WIN64)
342 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , std::size_t , signed char );
343 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , std::ptrdiff_t, signed char );
344 #endif
345 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , float , signed char );
346 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , double , signed char );
347 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( signed char , long double , signed char );
349 //*************************************************************************************************
350 
351 
352 
353 
354 //=================================================================================================
355 //
356 // WCHAR_T SPECIALIZATIONS
357 //
358 //=================================================================================================
359 
360 //*************************************************************************************************
362 // Type 1 Type 2 Low type
363 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , unsigned char , unsigned char );
364 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , char , char );
365 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , signed char , signed char );
366 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , wchar_t , wchar_t );
367 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , unsigned short, wchar_t );
368 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , short , wchar_t );
369 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , unsigned int , wchar_t );
370 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , int , wchar_t );
371 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , unsigned long , wchar_t );
372 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , long , wchar_t );
373 #if defined(_WIN64)
374 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , std::size_t , wchar_t );
375 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , std::ptrdiff_t, wchar_t );
376 #endif
377 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , float , wchar_t );
378 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , double , wchar_t );
379 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( wchar_t , long double , wchar_t );
381 //*************************************************************************************************
382 
383 
384 
385 
386 //=================================================================================================
387 //
388 // UNSIGNED SHORT SPECIALIZATIONS
389 //
390 //=================================================================================================
391 
392 //*************************************************************************************************
394 // Type 1 Type 2 Low type
395 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, unsigned char , unsigned char );
396 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, char , char );
397 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, signed char , signed char );
398 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, wchar_t , wchar_t );
399 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, unsigned short, unsigned short );
400 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, short , unsigned short );
401 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, unsigned int , unsigned short );
402 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, int , unsigned short );
403 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, unsigned long , unsigned short );
404 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, long , unsigned short );
405 #if defined(_WIN64)
406 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, std::size_t , unsigned short );
407 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, std::ptrdiff_t, unsigned short );
408 #endif
409 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, float , unsigned short );
410 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, double , unsigned short );
411 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned short, long double , unsigned short );
413 //*************************************************************************************************
414 
415 
416 
417 
418 //=================================================================================================
419 //
420 // SHORT SPECIALIZATIONS
421 //
422 //=================================================================================================
423 
424 //*************************************************************************************************
426 // Type 1 Type 2 Low type
427 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , unsigned char , unsigned char );
428 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , char , char );
429 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , signed char , signed char );
430 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , wchar_t , wchar_t );
431 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , unsigned short, unsigned short );
432 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , short , short );
433 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , unsigned int , short );
434 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , int , short );
435 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , unsigned long , short );
436 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , long , short );
437 #if defined(_WIN64)
438 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , std::size_t , short );
439 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , std::ptrdiff_t, short );
440 #endif
441 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , float , short );
442 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , double , short );
443 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( short , long double , short );
445 //*************************************************************************************************
446 
447 
448 
449 
450 //=================================================================================================
451 //
452 // UNSIGNED INT SPECIALIZATIONS
453 //
454 //=================================================================================================
455 
456 //*************************************************************************************************
458 // Type 1 Type 2 Low type
459 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , unsigned char , unsigned char );
460 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , char , char );
461 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , signed char , signed char );
462 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , wchar_t , wchar_t );
463 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , unsigned short, unsigned short );
464 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , short , short );
465 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , unsigned int , unsigned int );
466 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , int , unsigned int );
467 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , unsigned long , unsigned int );
468 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , long , unsigned int );
469 #if defined(_WIN64)
470 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , std::size_t , unsigned int );
471 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , std::ptrdiff_t, unsigned int );
472 #endif
473 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , float , unsigned int );
474 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , double , unsigned int );
475 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned int , long double , unsigned int );
477 //*************************************************************************************************
478 
479 
480 
481 
482 //=================================================================================================
483 //
484 // INT SPECIALIZATIONS
485 //
486 //=================================================================================================
487 
488 //*************************************************************************************************
490 // Type 1 Type 2 Low type
491 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , unsigned char , unsigned char );
492 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , char , wchar_t );
493 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , signed char , signed char );
494 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , wchar_t , wchar_t );
495 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , unsigned short, unsigned short );
496 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , short , short );
497 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , unsigned int , unsigned int );
498 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , int , int );
499 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , unsigned long , int );
500 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , long , int );
501 #if defined(_WIN64)
502 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , std::size_t , int );
503 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , std::ptrdiff_t, int );
504 #endif
505 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , float , int );
506 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , double , int );
507 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( int , long double , int );
509 //*************************************************************************************************
510 
511 
512 
513 
514 //=================================================================================================
515 //
516 // UNSIGNED LONG SPECIALIZATIONS
517 //
518 //=================================================================================================
519 
520 //*************************************************************************************************
522 // Type 1 Type 2 Low type
523 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , unsigned char , unsigned char );
524 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , char , char );
525 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , signed char , signed char );
526 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , wchar_t , wchar_t );
527 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , unsigned short, unsigned short );
528 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , short , short );
529 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , unsigned int , unsigned int );
530 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , int , int );
531 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , unsigned long , unsigned long );
532 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , long , unsigned long );
533 #if defined(_WIN64)
534 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , std::size_t , unsigned long );
535 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , std::ptrdiff_t, unsigned long );
536 #endif
537 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , float , unsigned long );
538 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , double , unsigned long );
539 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( unsigned long , long double , unsigned long );
541 //*************************************************************************************************
542 
543 
544 
545 
546 //=================================================================================================
547 //
548 // LONG SPECIALIZATIONS
549 //
550 //=================================================================================================
551 
552 //*************************************************************************************************
554 // Type 1 Type 2 Low type
555 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , unsigned char , unsigned char );
556 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , char , char );
557 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , signed char , signed char );
558 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , wchar_t , wchar_t );
559 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , unsigned short, unsigned short );
560 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , short , short );
561 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , unsigned int , unsigned int );
562 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , int , int );
563 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , unsigned long , unsigned long );
564 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , long , long );
565 #if defined(_WIN64)
566 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , std::size_t , long );
567 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , std::ptrdiff_t, long );
568 #endif
569 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , float , long );
570 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , double , long );
571 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long , long double , long );
573 //*************************************************************************************************
574 
575 
576 
577 
578 //=================================================================================================
579 //
580 // SIZE_T SPECIALIZATIONS
581 //
582 //=================================================================================================
583 
584 //*************************************************************************************************
585 #if defined(_WIN64)
586 
587 // Type 1 Type 2 Low type
588 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , unsigned char , unsigned char );
589 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , char , char );
590 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , signed char , signed char );
591 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , wchar_t , wchar_t );
592 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , unsigned short, unsigned short );
593 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , short , short );
594 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , unsigned int , unsigned int );
595 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , int , int );
596 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , unsigned long , unsigned long );
597 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , long , long );
598 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , std::size_t , std::size_t );
599 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , std::ptrdiff_t, std::size_t );
600 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , float , std::size_t );
601 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , double , std::size_t );
602 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::size_t , long double , std::size_t );
604 #endif
605 //*************************************************************************************************
606 
607 
608 
609 
610 //=================================================================================================
611 //
612 // PTRDIFF_T SPECIALIZATIONS
613 //
614 //=================================================================================================
615 
616 //*************************************************************************************************
617 #if defined(_WIN64)
618 
619 // Type 1 Type 2 Low type
620 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, unsigned char , unsigned char );
621 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, char , char );
622 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, signed char , signed char );
623 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, wchar_t , wchar_t );
624 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, unsigned short, unsigned short );
625 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, short , short );
626 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, unsigned int , unsigned int );
627 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, int , int );
628 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, unsigned long , unsigned long );
629 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, long , long );
630 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, std::size_t , std::size_t );
631 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, std::ptrdiff_t, std::ptrdiff_t );
632 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, float , std::ptrdiff_t );
633 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, double , std::ptrdiff_t );
634 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( std::ptrdiff_t, long double , std::ptrdiff_t );
636 #endif
637 //*************************************************************************************************
638 
639 
640 
641 
642 //=================================================================================================
643 //
644 // FLOAT SPECIALIZATIONS
645 //
646 //=================================================================================================
647 
648 //*************************************************************************************************
650 // Type 1 Type 2 Low type
651 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , unsigned char , unsigned char );
652 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , char , char );
653 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , signed char , signed char );
654 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , wchar_t , wchar_t );
655 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , unsigned short, unsigned short );
656 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , short , short );
657 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , unsigned int , unsigned int );
658 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , int , int );
659 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , unsigned long , unsigned long );
660 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , long , long );
661 #if defined(_WIN64)
662 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , std::size_t , std::size_t );
663 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , std::ptrdiff_t, std::ptrdiff_t );
664 #endif
665 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , float , float );
666 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , double , float );
667 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( float , long double , float );
669 //*************************************************************************************************
670 
671 
672 
673 
674 //=================================================================================================
675 //
676 // DOUBLE SPECIALIZATIONS
677 //
678 //=================================================================================================
679 
680 //*************************************************************************************************
682 // Type 1 Type 2 Low type
683 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , unsigned char , unsigned char );
684 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , char , char );
685 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , signed char , signed char );
686 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , wchar_t , wchar_t );
687 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , unsigned short, unsigned short );
688 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , short , short );
689 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , unsigned int , unsigned int );
690 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , int , int );
691 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , unsigned long , unsigned long );
692 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , long , long );
693 #if defined(_WIN64)
694 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , std::size_t , std::size_t );
695 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , std::ptrdiff_t, std::ptrdiff_t );
696 #endif
697 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , float , float );
698 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , double , double );
699 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( double , long double , double );
701 //*************************************************************************************************
702 
703 
704 
705 
706 //=================================================================================================
707 //
708 // LONG DOUBLE SPECIALIZATIONS
709 //
710 //=================================================================================================
711 
712 //*************************************************************************************************
714 // Type 1 Type 2 Low type
715 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , unsigned char , unsigned char );
716 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , char , char );
717 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , signed char , signed char );
718 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , wchar_t , wchar_t );
719 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , unsigned short, unsigned short );
720 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , short , short );
721 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , unsigned int , unsigned int );
722 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , int , int );
723 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , unsigned long , unsigned long );
724 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , long , long );
725 #if defined(_WIN64)
726 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , std::size_t , std::size_t );
727 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , std::ptrdiff_t, std::ptrdiff_t );
728 #endif
729 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , float , float );
730 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , double , double );
731 BLAZE_CREATE_BUILTIN_LOWTYPE_SPECIALIZATION( long double , long double , long double );
733 //*************************************************************************************************
734 
735 
736 
737 
738 //=================================================================================================
739 //
740 // COMPLEX SPECIALIZATIONS
741 //
742 //=================================================================================================
743 
744 //*************************************************************************************************
746 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( unsigned char );
747 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( char );
748 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( signed char );
749 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( wchar_t );
750 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( unsigned short );
751 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( short );
752 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( unsigned int );
753 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( int );
754 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( unsigned long );
755 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( long );
756 #if defined(_WIN64)
757 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( std::size_t );
758 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( std::ptrdiff_t );
759 #endif
760 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( float );
761 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( double );
762 BLAZE_CREATE_COMPLEX_LOWTYPE_SPECIALIZATION( long double );
764 //*************************************************************************************************
765 
766 
767 //*************************************************************************************************
769 template< typename T >
770 struct LowType< complex<T>, complex<T> >
771 {
772  using Type = complex< Decay_<T> >;
773 };
775 //*************************************************************************************************
776 
777 
778 //*************************************************************************************************
780 template< typename T1, typename T2 >
781 struct LowType< complex<T1>, complex<T2> >
782 {
783  using Type = complex< typename LowType<T1,T2>::Type >;
784 };
786 //*************************************************************************************************
787 
788 } // namespace blaze
789 
790 #endif
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.
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.
Base template for the LowType type trait.
Definition: LowType.h:133
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.
typename LowType< T1, T2 >::Type LowType_
Auxiliary alias declaration for the LowType type trait.The LowType_ alias declaration provides a conv...
Definition: LowType.h:177
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.