AddTrait.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_TRAITS_ADDTRAIT_H_
36 #define _BLAZE_MATH_TRAITS_ADDTRAIT_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>
53 
54 
55 namespace blaze {
56 
57 //=================================================================================================
58 //
59 // CLASS DEFINITION
60 //
61 //=================================================================================================
62 
63 //*************************************************************************************************
148 template< typename T1 // Type of the left-hand side operand
149  , typename T2 > // Type of the right-hand side operand
150 struct AddTrait
151 {
152  private:
153  //**********************************************************************************************
155  struct Failure { typedef INVALID_TYPE Type; };
157  //**********************************************************************************************
158 
159  //**********************************************************************************************
161  typedef typename RemoveReference< typename RemoveCV<T1>::Type >::Type Type1;
162  typedef typename RemoveReference< typename RemoveCV<T2>::Type >::Type Type2;
164  //**********************************************************************************************
165 
166  public:
167  //**********************************************************************************************
171  , AddTrait<Type1,Type2>, Failure >::Type::Type Type;
173  //**********************************************************************************************
174 };
175 //*************************************************************************************************
176 
177 
178 
179 
180 //=================================================================================================
181 //
182 // ADDTRAIT SPECIALIZATION MACROS
183 //
184 //=================================================================================================
185 
186 //*************************************************************************************************
193 #define BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION(T1,T2,RES) \
194  template<> \
195  struct AddTrait< T1, T2 > \
196  { \
197  typedef RES Type; \
198  }
199 
200 //*************************************************************************************************
201 
202 
203 //*************************************************************************************************
210 #define BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( T1 ) \
211  template< typename T2 > \
212  struct AddTrait< T1, complex<T2> > \
213  { \
214  typedef complex<typename AddTrait<T1,T2>::Type> Type; \
215  }; \
216  template< typename T2 > \
217  struct AddTrait< complex<T2>, T1 > \
218  { \
219  typedef complex<typename AddTrait<T2,T1>::Type> Type; \
220  }
221 
222 //*************************************************************************************************
223 
224 
225 
226 
227 //=================================================================================================
228 //
229 // UNSIGNED CHAR SPECIALIZATIONS
230 //
231 //=================================================================================================
232 
233 //*************************************************************************************************
235 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , unsigned char , unsigned char );
236 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , char , char );
237 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , signed char , signed char );
238 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , wchar_t , wchar_t );
239 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , unsigned short, unsigned short );
240 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , short , short );
241 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , unsigned int , unsigned int );
242 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , int , int );
243 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , unsigned long , unsigned long );
244 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , long , long );
245 #if defined(_WIN64)
246 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , std::size_t , std::size_t );
247 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , std::ptrdiff_t, std::ptrdiff_t );
248 #endif
249 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , float , float );
250 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , double , double );
251 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , long double , long double );
253 //*************************************************************************************************
254 
255 
256 
257 
258 //=================================================================================================
259 //
260 // CHAR SPECIALIZATIONS
261 //
262 //=================================================================================================
263 
264 //*************************************************************************************************
266 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , unsigned char , char );
267 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , char , char );
268 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , signed char , signed char );
269 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , wchar_t , wchar_t );
270 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , unsigned short, unsigned short );
271 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , short , short );
272 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , unsigned int , unsigned int );
273 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , int , int );
274 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , unsigned long , unsigned long );
275 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , long , long );
276 #if defined(_WIN64)
277 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , std::size_t , std::size_t );
278 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , std::ptrdiff_t, std::ptrdiff_t );
279 #endif
280 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , float , float );
281 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , double , double );
282 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , long double , long double );
284 //*************************************************************************************************
285 
286 
287 
288 
289 //=================================================================================================
290 //
291 // SIGNED CHAR SPECIALIZATIONS
292 //
293 //=================================================================================================
294 
295 //*************************************************************************************************
297 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , unsigned char , signed char );
298 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , char , signed char );
299 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , signed char , signed char );
300 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , wchar_t , wchar_t );
301 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , unsigned short, unsigned short );
302 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , short , short );
303 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , unsigned int , unsigned int );
304 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , int , int );
305 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , unsigned long , unsigned long );
306 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , long , long );
307 #if defined(_WIN64)
308 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , std::size_t , std::size_t );
309 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , std::ptrdiff_t, std::ptrdiff_t );
310 #endif
311 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , float , float );
312 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , double , double );
313 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , long double , long double );
315 //*************************************************************************************************
316 
317 
318 
319 
320 //=================================================================================================
321 //
322 // WCHAR_T SPECIALIZATIONS
323 //
324 //=================================================================================================
325 
326 //*************************************************************************************************
328 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , unsigned char , wchar_t );
329 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , char , wchar_t );
330 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , signed char , wchar_t );
331 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , wchar_t , wchar_t );
332 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , unsigned short, unsigned short );
333 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , short , short );
334 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , unsigned int , unsigned int );
335 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , int , int );
336 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , unsigned long , unsigned long );
337 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , long , long );
338 #if defined(_WIN64)
339 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , std::size_t , std::size_t );
340 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , std::ptrdiff_t, std::ptrdiff_t );
341 #endif
342 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , float , float );
343 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , double , double );
344 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , long double , long double );
346 //*************************************************************************************************
347 
348 
349 
350 
351 //=================================================================================================
352 //
353 // UNSIGNED SHORT SPECIALIZATIONS
354 //
355 //=================================================================================================
356 
357 //*************************************************************************************************
359 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, unsigned char , unsigned short );
360 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, char , unsigned short );
361 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, signed char , unsigned short );
362 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, wchar_t , unsigned short );
363 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, unsigned short, unsigned short );
364 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, short , short );
365 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, unsigned int , unsigned int );
366 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, int , int );
367 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, unsigned long , unsigned long );
368 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, long , long );
369 #if defined(_WIN64)
370 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, std::size_t , std::size_t );
371 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, std::ptrdiff_t, std::ptrdiff_t );
372 #endif
373 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, float , float );
374 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, double , double );
375 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, long double , long double );
377 //*************************************************************************************************
378 
379 
380 
381 
382 //=================================================================================================
383 //
384 // SHORT SPECIALIZATIONS
385 //
386 //=================================================================================================
387 
388 //*************************************************************************************************
390 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , unsigned char , short );
391 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , char , short );
392 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , signed char , short );
393 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , wchar_t , short );
394 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , unsigned short, short );
395 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , short , short );
396 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , unsigned int , unsigned int );
397 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , int , int );
398 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , unsigned long , unsigned long );
399 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , long , long );
400 #if defined(_WIN64)
401 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , std::size_t , std::size_t );
402 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , std::ptrdiff_t, std::ptrdiff_t );
403 #endif
404 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , float , float );
405 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , double , double );
406 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , long double , long double );
408 //*************************************************************************************************
409 
410 
411 
412 
413 //=================================================================================================
414 //
415 // UNSIGNED INT SPECIALIZATIONS
416 //
417 //=================================================================================================
418 
419 //*************************************************************************************************
421 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , unsigned char , unsigned int );
422 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , char , unsigned int );
423 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , signed char , unsigned int );
424 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , wchar_t , unsigned int );
425 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , unsigned short, unsigned int );
426 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , short , unsigned int );
427 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , unsigned int , unsigned int );
428 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , int , int );
429 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , unsigned long , unsigned long );
430 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , long , long );
431 #if defined(_WIN64)
432 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , std::size_t , std::size_t );
433 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , std::ptrdiff_t, std::ptrdiff_t );
434 #endif
435 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , float , float );
436 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , double , double );
437 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , long double , long double );
439 //*************************************************************************************************
440 
441 
442 
443 
444 //=================================================================================================
445 //
446 // INT SPECIALIZATIONS
447 //
448 //=================================================================================================
449 
450 //*************************************************************************************************
452 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , unsigned char , int );
453 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , char , int );
454 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , signed char , int );
455 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , wchar_t , int );
456 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , unsigned short, int );
457 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , short , int );
458 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , unsigned int , int );
459 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , int , int );
460 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , unsigned long , unsigned long );
461 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , long , long );
462 #if defined(_WIN64)
463 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , std::size_t , std::size_t );
464 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , std::ptrdiff_t, std::ptrdiff_t );
465 #endif
466 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , float , float );
467 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , double , double );
468 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , long double , long double );
470 //*************************************************************************************************
471 
472 
473 
474 
475 //=================================================================================================
476 //
477 // UNSIGNED LONG SPECIALIZATIONS
478 //
479 //=================================================================================================
480 
481 //*************************************************************************************************
483 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , unsigned char , unsigned long );
484 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , char , unsigned long );
485 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , signed char , unsigned long );
486 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , wchar_t , unsigned long );
487 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , unsigned short, unsigned long );
488 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , short , unsigned long );
489 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , unsigned int , unsigned long );
490 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , int , unsigned long );
491 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , unsigned long , unsigned long );
492 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , long , long );
493 #if defined(_WIN64)
494 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , std::size_t , std::size_t );
495 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , std::ptrdiff_t, std::ptrdiff_t );
496 #endif
497 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , float , float );
498 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , double , double );
499 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , long double , long double );
501 //*************************************************************************************************
502 
503 
504 
505 
506 //=================================================================================================
507 //
508 // LONG SPECIALIZATIONS
509 //
510 //=================================================================================================
511 
512 //*************************************************************************************************
514 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , unsigned char , long );
515 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , char , long );
516 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , signed char , long );
517 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , wchar_t , long );
518 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , unsigned short, long );
519 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , short , long );
520 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , unsigned int , long );
521 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , int , long );
522 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , unsigned long , long );
523 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , long , long );
524 #if defined(_WIN64)
525 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , std::size_t , std::size_t );
526 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , std::ptrdiff_t, std::ptrdiff_t );
527 #endif
528 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , float , float );
529 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , double , double );
530 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , long double , long double );
532 //*************************************************************************************************
533 
534 
535 
536 
537 //=================================================================================================
538 //
539 // SIZE_T SPECIALIZATIONS
540 //
541 //=================================================================================================
542 
543 //*************************************************************************************************
544 #if defined(_WIN64)
545 
546 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , unsigned char , std::size_t );
547 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , char , std::size_t );
548 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , signed char , std::size_t );
549 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , wchar_t , std::size_t );
550 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , unsigned short, std::size_t );
551 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , short , std::size_t );
552 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , unsigned int , std::size_t );
553 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , int , std::size_t );
554 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , unsigned long , std::size_t );
555 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , long , std::size_t );
556 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , std::size_t , std::size_t );
557 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , std::ptrdiff_t, std::ptrdiff_t );
558 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , float , float );
559 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , double , double );
560 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , long double , long double );
562 #endif
563 //*************************************************************************************************
564 
565 
566 
567 
568 //=================================================================================================
569 //
570 // PTRDIFF_T SPECIALIZATIONS
571 //
572 //=================================================================================================
573 
574 //*************************************************************************************************
575 #if defined(_WIN64)
576 
577 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned char , std::ptrdiff_t );
578 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, char , std::ptrdiff_t );
579 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, signed char , std::ptrdiff_t );
580 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, wchar_t , std::ptrdiff_t );
581 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned short, std::ptrdiff_t );
582 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, short , std::ptrdiff_t );
583 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned int , std::ptrdiff_t );
584 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, int , std::ptrdiff_t );
585 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned long , std::ptrdiff_t );
586 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, long , std::ptrdiff_t );
587 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, std::size_t , std::ptrdiff_t );
588 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, std::ptrdiff_t, std::ptrdiff_t );
589 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, float , float );
590 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, double , double );
591 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, long double , long double );
593 #endif
594 //*************************************************************************************************
595 
596 
597 
598 
599 //=================================================================================================
600 //
601 // FLOAT SPECIALIZATIONS
602 //
603 //=================================================================================================
604 
605 //*************************************************************************************************
607 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , unsigned char , float );
608 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , char , float );
609 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , signed char , float );
610 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , wchar_t , float );
611 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , unsigned short, float );
612 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , short , float );
613 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , unsigned int , float );
614 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , int , float );
615 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , unsigned long , float );
616 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , long , float );
617 #if defined(_WIN64)
618 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , std::size_t , float );
619 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , std::ptrdiff_t, float );
620 #endif
621 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , float , float );
622 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , double , double );
623 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , long double , long double );
625 //*************************************************************************************************
626 
627 
628 
629 
630 //=================================================================================================
631 //
632 // DOUBLE SPECIALIZATIONS
633 //
634 //=================================================================================================
635 
636 //*************************************************************************************************
638 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , unsigned char , double );
639 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , char , double );
640 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , signed char , double );
641 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , wchar_t , double );
642 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , unsigned short, double );
643 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , short , double );
644 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , unsigned int , double );
645 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , int , double );
646 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , unsigned long , double );
647 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , long , double );
648 #if defined(_WIN64)
649 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , std::size_t , double );
650 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , std::ptrdiff_t, double );
651 #endif
652 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , float , double );
653 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , double , double );
654 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , long double , long double );
656 //*************************************************************************************************
657 
658 
659 
660 
661 //=================================================================================================
662 //
663 // LONG DOUBLE SPECIALIZATIONS
664 //
665 //=================================================================================================
666 
667 //*************************************************************************************************
669 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , unsigned char , long double );
670 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , char , long double );
671 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , signed char , long double );
672 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , wchar_t , long double );
673 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , unsigned short, long double );
674 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , short , long double );
675 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , unsigned int , long double );
676 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , int , long double );
677 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , unsigned long , long double );
678 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , long , long double );
679 #if defined(_WIN64)
680 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , std::size_t , long double );
681 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , std::ptrdiff_t, long double );
682 #endif
683 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , float , long double );
684 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , double , long double );
685 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , long double , long double );
687 //*************************************************************************************************
688 
689 
690 
691 
692 //=================================================================================================
693 //
694 // COMPLEX SPECIALIZATIONS
695 //
696 //=================================================================================================
697 
698 //*************************************************************************************************
700 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( unsigned char );
701 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( char );
702 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( signed char );
703 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( wchar_t );
704 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( unsigned short );
705 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( short );
706 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( unsigned int );
707 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( int );
708 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( unsigned long );
709 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( long );
710 #if defined(_WIN64)
711 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( std::size_t );
712 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t );
713 #endif
714 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( float );
715 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( double );
716 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( long double );
718 //*************************************************************************************************
719 
720 
721 //*************************************************************************************************
723 template< typename T1, typename T2 >
724 struct AddTrait< complex<T1>, complex<T2> >
725 {
726  typedef complex<typename AddTrait<T1,T2>::Type> Type;
727 };
729 //*************************************************************************************************
730 
731 } // namespace blaze
732 
733 #endif
Compile time type selection.The If class template selects one of the two given types T2 and T3 depend...
Definition: If.h:112
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.
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.
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.
Base template for the AddTrait class.
Definition: AddTrait.h:150
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.