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