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