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 MACRO
186 //
187 //=================================================================================================
188 
189 //*************************************************************************************************
196 #define BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION(T1,T2,HIGH) \
197  template<> \
198  struct HighType< T1, T2 > \
199  { \
200  using Type = HIGH; \
201  }
202 
203 //*************************************************************************************************
204 
205 
206 //*************************************************************************************************
213 #define BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( T1 ) \
214  template< typename T2 > \
215  struct HighType< T1, complex<T2> > \
216  { \
217  using Type = complex<T2>; \
218  }; \
219  template< typename T2 > \
220  struct HighType< complex<T2>, T1 > \
221  { \
222  using Type = complex<T2>; \
223  }
224 
225 //*************************************************************************************************
226 
227 
228 
229 
230 //=================================================================================================
231 //
232 // UNSIGNED CHAR SPECIALIZATIONS
233 //
234 //=================================================================================================
235 
236 //*************************************************************************************************
238 // Type 1 Type 2 High type
239 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , unsigned char , unsigned char );
240 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , char , char );
241 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , signed char , signed char );
242 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , wchar_t , wchar_t );
243 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , unsigned short, unsigned short );
244 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , short , short );
245 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , unsigned int , unsigned int );
246 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , int , int );
247 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , unsigned long , unsigned long );
248 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , long , long );
249 #if defined(_WIN64)
250 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , std::size_t , std::size_t );
251 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , std::ptrdiff_t, std::ptrdiff_t );
252 #endif
253 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , float , float );
254 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , double , double );
255 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned char , long double , long double );
257 //*************************************************************************************************
258 
259 
260 
261 
262 //=================================================================================================
263 //
264 // CHAR SPECIALIZATIONS
265 //
266 //=================================================================================================
267 
268 //*************************************************************************************************
270 // Type 1 Type 2 High type
271 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , unsigned char , char );
272 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , char , char );
273 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , signed char , signed char );
274 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , wchar_t , wchar_t );
275 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , unsigned short, unsigned short );
276 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , short , short );
277 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , unsigned int , unsigned int );
278 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , int , int );
279 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , unsigned long , unsigned long );
280 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , long , long );
281 #if defined(_WIN64)
282 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , std::size_t , std::size_t );
283 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , std::ptrdiff_t, std::ptrdiff_t );
284 #endif
285 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , float , float );
286 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , double , double );
287 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( char , long double , long double );
289 //*************************************************************************************************
290 
291 
292 
293 
294 //=================================================================================================
295 //
296 // SIGNED CHAR SPECIALIZATIONS
297 //
298 //=================================================================================================
299 
300 //*************************************************************************************************
302 // Type 1 Type 2 High type
303 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , unsigned char , signed char );
304 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , char , signed char );
305 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , signed char , signed char );
306 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , wchar_t , wchar_t );
307 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , unsigned short, unsigned short );
308 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , short , short );
309 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , unsigned int , unsigned int );
310 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , int , int );
311 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , unsigned long , unsigned long );
312 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , long , long );
313 #if defined(_WIN64)
314 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , std::size_t , std::size_t );
315 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , std::ptrdiff_t, std::ptrdiff_t );
316 #endif
317 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , float , float );
318 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , double , double );
319 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( signed char , long double , long double );
321 //*************************************************************************************************
322 
323 
324 
325 
326 //=================================================================================================
327 //
328 // WCHAR_T SPECIALIZATIONS
329 //
330 //=================================================================================================
331 
332 //*************************************************************************************************
334 // Type 1 Type 2 High type
335 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , unsigned char , wchar_t );
336 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , char , wchar_t );
337 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , signed char , wchar_t );
338 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , wchar_t , wchar_t );
339 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , unsigned short, unsigned short );
340 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , short , short );
341 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , unsigned int , unsigned int );
342 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , int , int );
343 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , unsigned long , unsigned long );
344 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , long , long );
345 #if defined(_WIN64)
346 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , std::size_t , std::size_t );
347 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , std::ptrdiff_t, std::ptrdiff_t );
348 #endif
349 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , float , float );
350 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , double , double );
351 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( wchar_t , long double , long double );
353 //*************************************************************************************************
354 
355 
356 
357 
358 //=================================================================================================
359 //
360 // UNSIGNED SHORT SPECIALIZATIONS
361 //
362 //=================================================================================================
363 
364 //*************************************************************************************************
366 // Type 1 Type 2 High type
367 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, unsigned char , unsigned short );
368 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, char , unsigned short );
369 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, signed char , unsigned short );
370 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, wchar_t , unsigned short );
371 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, unsigned short, unsigned short );
372 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, short , short );
373 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, unsigned int , unsigned int );
374 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, int , int );
375 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, unsigned long , unsigned long );
376 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, long , long );
377 #if defined(_WIN64)
378 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, std::size_t , std::size_t );
379 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, std::ptrdiff_t, std::ptrdiff_t );
380 #endif
381 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, float , float );
382 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, double , double );
383 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned short, long double , long double );
385 //*************************************************************************************************
386 
387 
388 
389 
390 //=================================================================================================
391 //
392 // SHORT SPECIALIZATIONS
393 //
394 //=================================================================================================
395 
396 //*************************************************************************************************
398 // Type 1 Type 2 High type
399 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , unsigned char , short );
400 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , char , short );
401 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , signed char , short );
402 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , wchar_t , short );
403 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , unsigned short, short );
404 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , short , short );
405 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , unsigned int , unsigned int );
406 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , int , int );
407 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , unsigned long , unsigned long );
408 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , long , long );
409 #if defined(_WIN64)
410 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , std::size_t , std::size_t );
411 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , std::ptrdiff_t, std::ptrdiff_t );
412 #endif
413 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , float , float );
414 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , double , double );
415 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( short , long double , long double );
417 //*************************************************************************************************
418 
419 
420 
421 
422 //=================================================================================================
423 //
424 // UNSIGNED INT SPECIALIZATIONS
425 //
426 //=================================================================================================
427 
428 //*************************************************************************************************
430 // Type 1 Type 2 High type
431 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , unsigned char , unsigned int );
432 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , char , unsigned int );
433 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , signed char , unsigned int );
434 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , wchar_t , unsigned int );
435 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , unsigned short, unsigned int );
436 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , short , unsigned int );
437 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , unsigned int , unsigned int );
438 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , int , int );
439 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , unsigned long , unsigned long );
440 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , long , long );
441 #if defined(_WIN64)
442 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , std::size_t , std::size_t );
443 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , std::ptrdiff_t, std::ptrdiff_t );
444 #endif
445 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , float , float );
446 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , double , double );
447 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned int , long double , long double );
449 //*************************************************************************************************
450 
451 
452 
453 
454 //=================================================================================================
455 //
456 // INT SPECIALIZATIONS
457 //
458 //=================================================================================================
459 
460 //*************************************************************************************************
462 // Type 1 Type 2 High type
463 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , unsigned char , int );
464 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , char , int );
465 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , signed char , int );
466 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , wchar_t , int );
467 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , unsigned short, int );
468 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , short , int );
469 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , unsigned int , int );
470 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , int , int );
471 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , unsigned long , unsigned long );
472 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , long , long );
473 #if defined(_WIN64)
474 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , std::size_t , std::size_t );
475 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , std::ptrdiff_t, std::ptrdiff_t );
476 #endif
477 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , float , float );
478 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , double , double );
479 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( int , long double , long double );
481 //*************************************************************************************************
482 
483 
484 
485 
486 //=================================================================================================
487 //
488 // UNSIGNED LONG SPECIALIZATIONS
489 //
490 //=================================================================================================
491 
492 //*************************************************************************************************
494 // Type 1 Type 2 High type
495 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , unsigned char , unsigned long );
496 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , char , unsigned long );
497 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , signed char , unsigned long );
498 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , wchar_t , unsigned long );
499 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , unsigned short, unsigned long );
500 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , short , unsigned long );
501 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , unsigned int , unsigned long );
502 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , int , unsigned long );
503 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , unsigned long , unsigned long );
504 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , long , long );
505 #if defined(_WIN64)
506 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , std::size_t , std::size_t );
507 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , std::ptrdiff_t, std::ptrdiff_t );
508 #endif
509 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , float , float );
510 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , double , double );
511 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( unsigned long , long double , long double );
513 //*************************************************************************************************
514 
515 
516 
517 
518 //=================================================================================================
519 //
520 // LONG SPECIALIZATIONS
521 //
522 //=================================================================================================
523 
524 //*************************************************************************************************
526 // Type 1 Type 2 High type
527 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , unsigned char , long );
528 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , char , long );
529 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , signed char , long );
530 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , wchar_t , long );
531 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , unsigned short, long );
532 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , short , long );
533 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , unsigned int , long );
534 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , int , long );
535 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , unsigned long , long );
536 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , long , long );
537 #if defined(_WIN64)
538 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , std::size_t , std::size_t );
539 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , std::ptrdiff_t, std::ptrdiff_t );
540 #endif
541 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , float , float );
542 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , double , double );
543 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long , long double , long double );
545 //*************************************************************************************************
546 
547 
548 
549 
550 //=================================================================================================
551 //
552 // SIZE_T SPECIALIZATIONS
553 //
554 //=================================================================================================
555 
556 //*************************************************************************************************
557 #if defined(_WIN64)
558 
559 // Type 1 Type 2 High type
560 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , unsigned char , std::size_t );
561 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , char , std::size_t );
562 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , signed char , std::size_t );
563 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , wchar_t , std::size_t );
564 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , unsigned short, std::size_t );
565 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , short , std::size_t );
566 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , unsigned int , std::size_t );
567 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , int , std::size_t );
568 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , unsigned long , std::size_t );
569 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , long , std::size_t );
570 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , std::size_t , std::size_t );
571 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , std::ptrdiff_t, std::ptrdiff_t );
572 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , float , float );
573 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , double , double );
574 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::size_t , long double , long double );
576 #endif
577 //*************************************************************************************************
578 
579 
580 
581 
582 //=================================================================================================
583 //
584 // PTRDIFF_T SPECIALIZATIONS
585 //
586 //=================================================================================================
587 
588 //*************************************************************************************************
589 #if defined(_WIN64)
590 
591 // Type 1 Type 2 High type
592 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, unsigned char , std::ptrdiff_t );
593 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, char , std::ptrdiff_t );
594 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, signed char , std::ptrdiff_t );
595 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, wchar_t , std::ptrdiff_t );
596 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, unsigned short, std::ptrdiff_t );
597 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, short , std::ptrdiff_t );
598 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, unsigned int , std::ptrdiff_t );
599 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, int , std::ptrdiff_t );
600 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, unsigned long , std::ptrdiff_t );
601 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, long , std::ptrdiff_t );
602 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, std::size_t , std::ptrdiff_t );
603 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, std::ptrdiff_t, std::ptrdiff_t );
604 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, float , float );
605 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, double , double );
606 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t, long double , long double );
608 #endif
609 //*************************************************************************************************
610 
611 
612 
613 
614 //=================================================================================================
615 //
616 // FLOAT SPECIALIZATIONS
617 //
618 //=================================================================================================
619 
620 //*************************************************************************************************
622 // Type 1 Type 2 High type
623 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , unsigned char , float );
624 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , char , float );
625 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , signed char , float );
626 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , wchar_t , float );
627 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , unsigned short, float );
628 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , short , float );
629 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , unsigned int , float );
630 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , int , float );
631 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , unsigned long , float );
632 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , long , float );
633 #if defined(_WIN64)
634 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , std::size_t , float );
635 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , std::ptrdiff_t, float );
636 #endif
637 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , float , float );
638 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , double , double );
639 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( float , long double , long double );
641 //*************************************************************************************************
642 
643 
644 
645 
646 //=================================================================================================
647 //
648 // DOUBLE SPECIALIZATIONS
649 //
650 //=================================================================================================
651 
652 //*************************************************************************************************
654 // Type 1 Type 2 High type
655 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , unsigned char , double );
656 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , char , double );
657 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , signed char , double );
658 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , wchar_t , double );
659 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , unsigned short, double );
660 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , short , double );
661 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , unsigned int , double );
662 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , int , double );
663 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , unsigned long , double );
664 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , long , double );
665 #if defined(_WIN64)
666 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , std::size_t , double );
667 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , std::ptrdiff_t, double );
668 #endif
669 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , float , double );
670 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , double , double );
671 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( double , long double , long double );
673 //*************************************************************************************************
674 
675 
676 
677 
678 //=================================================================================================
679 //
680 // LONG DOUBLE SPECIALIZATIONS
681 //
682 //=================================================================================================
683 
684 //*************************************************************************************************
686 // Type 1 Type 2 High type
687 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , unsigned char , long double );
688 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , char , long double );
689 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , signed char , long double );
690 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , wchar_t , long double );
691 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , unsigned short, long double );
692 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , short , long double );
693 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , unsigned int , long double );
694 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , int , long double );
695 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , unsigned long , long double );
696 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , long , long double );
697 #if defined(_WIN64)
698 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , std::size_t , long double );
699 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , std::ptrdiff_t, long double );
700 #endif
701 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , float , long double );
702 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , double , long double );
703 BLAZE_CREATE_BUILTIN_HIGHTYPE_SPECIALIZATION( long double , long double , long double );
705 //*************************************************************************************************
706 
707 
708 
709 
710 //=================================================================================================
711 //
712 // COMPLEX SPECIALIZATIONS
713 //
714 //=================================================================================================
715 
716 //*************************************************************************************************
718 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( unsigned char );
719 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( char );
720 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( signed char );
721 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( wchar_t );
722 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( unsigned short );
723 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( short );
724 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( unsigned int );
725 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( int );
726 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( unsigned long );
727 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( long );
728 #if defined(_WIN64)
729 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( std::size_t );
730 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( std::ptrdiff_t );
731 #endif
732 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( float );
733 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( double );
734 BLAZE_CREATE_COMPLEX_HIGHTYPE_SPECIALIZATION( long double );
736 //*************************************************************************************************
737 
738 
739 //*************************************************************************************************
741 template< typename T >
742 struct HighType< complex<T>, complex<T> >
743 {
744  using Type = complex< Decay_<T> >;
745 };
747 //*************************************************************************************************
748 
749 
750 //*************************************************************************************************
752 template< typename T1, typename T2 >
753 struct HighType< complex<T1>, complex<T2> >
754 {
755  using Type = complex< typename HighType<T1,T2>::Type >;
756 };
758 //*************************************************************************************************
759 
760 } // namespace blaze
761 
762 #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:154
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.