All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 //*************************************************************************************************
140 template< typename T1 // Type of the left-hand side operand
141  , typename T2 > // Type of the right-hand side operand
142 struct AddTrait
143 {
144  private:
145  //**********************************************************************************************
147  struct Failure { typedef INVALID_TYPE Type; };
149  //**********************************************************************************************
150 
151  //**********************************************************************************************
153  typedef typename RemoveReference< typename RemoveCV<T1>::Type >::Type Type1;
154  typedef typename RemoveReference< typename RemoveCV<T2>::Type >::Type Type2;
156  //**********************************************************************************************
157 
158  public:
159  //**********************************************************************************************
163  , AddTrait<Type1,Type2>, Failure >::Type::Type Type;
165  //**********************************************************************************************
166 };
167 //*************************************************************************************************
168 
169 
170 
171 
172 //=================================================================================================
173 //
174 // ADDTRAIT SPECIALIZATION MACROS
175 //
176 //=================================================================================================
177 
178 //*************************************************************************************************
185 #define BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION(T1,T2,RES) \
186  template<> \
187  struct AddTrait< T1, T2 > \
188  { \
189  typedef RES Type; \
190  }
191 
192 //*************************************************************************************************
193 
194 
195 //*************************************************************************************************
202 #define BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( T1 ) \
203  template< typename T2 > \
204  struct AddTrait< T1, complex<T2> > \
205  { \
206  typedef complex<typename AddTrait<T1,T2>::Type> Type; \
207  }; \
208  template< typename T2 > \
209  struct AddTrait< complex<T2>, T1 > \
210  { \
211  typedef complex<typename AddTrait<T2,T1>::Type> Type; \
212  }
213 
214 //*************************************************************************************************
215 
216 
217 
218 
219 //=================================================================================================
220 //
221 // UNSIGNED CHAR SPECIALIZATIONS
222 //
223 //=================================================================================================
224 
225 //*************************************************************************************************
227 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , unsigned char , unsigned char );
228 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , char , char );
229 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , signed char , signed char );
230 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , wchar_t , wchar_t );
231 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , unsigned short, unsigned short );
232 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , short , short );
233 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , unsigned int , unsigned int );
234 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , int , int );
235 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , unsigned long , unsigned long );
236 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , long , long );
237 #if defined(_WIN64)
238 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , std::size_t , std::size_t );
239 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , std::ptrdiff_t, std::ptrdiff_t );
240 #endif
241 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , float , float );
242 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , double , double );
243 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned char , long double , long double );
245 //*************************************************************************************************
246 
247 
248 
249 
250 //=================================================================================================
251 //
252 // CHAR SPECIALIZATIONS
253 //
254 //=================================================================================================
255 
256 //*************************************************************************************************
258 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , unsigned char , char );
259 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , char , char );
260 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , signed char , signed char );
261 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , wchar_t , wchar_t );
262 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , unsigned short, unsigned short );
263 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , short , short );
264 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , unsigned int , unsigned int );
265 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , int , int );
266 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , unsigned long , unsigned long );
267 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , long , long );
268 #if defined(_WIN64)
269 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , std::size_t , std::size_t );
270 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , std::ptrdiff_t, std::ptrdiff_t );
271 #endif
272 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , float , float );
273 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , double , double );
274 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( char , long double , long double );
276 //*************************************************************************************************
277 
278 
279 
280 
281 //=================================================================================================
282 //
283 // SIGNED CHAR SPECIALIZATIONS
284 //
285 //=================================================================================================
286 
287 //*************************************************************************************************
289 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , unsigned char , signed char );
290 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , char , signed char );
291 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , signed char , signed char );
292 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , wchar_t , wchar_t );
293 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , unsigned short, unsigned short );
294 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , short , short );
295 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , unsigned int , unsigned int );
296 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , int , int );
297 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , unsigned long , unsigned long );
298 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , long , long );
299 #if defined(_WIN64)
300 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , std::size_t , std::size_t );
301 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , std::ptrdiff_t, std::ptrdiff_t );
302 #endif
303 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , float , float );
304 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , double , double );
305 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( signed char , long double , long double );
307 //*************************************************************************************************
308 
309 
310 
311 
312 //=================================================================================================
313 //
314 // WCHAR_T SPECIALIZATIONS
315 //
316 //=================================================================================================
317 
318 //*************************************************************************************************
320 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , unsigned char , wchar_t );
321 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , char , wchar_t );
322 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , signed char , wchar_t );
323 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , wchar_t , wchar_t );
324 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , unsigned short, unsigned short );
325 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , short , short );
326 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , unsigned int , unsigned int );
327 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , int , int );
328 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , unsigned long , unsigned long );
329 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , long , long );
330 #if defined(_WIN64)
331 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , std::size_t , std::size_t );
332 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , std::ptrdiff_t, std::ptrdiff_t );
333 #endif
334 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , float , float );
335 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , double , double );
336 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( wchar_t , long double , long double );
338 //*************************************************************************************************
339 
340 
341 
342 
343 //=================================================================================================
344 //
345 // UNSIGNED SHORT SPECIALIZATIONS
346 //
347 //=================================================================================================
348 
349 //*************************************************************************************************
351 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, unsigned char , unsigned short );
352 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, char , unsigned short );
353 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, signed char , unsigned short );
354 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, wchar_t , unsigned short );
355 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, unsigned short, unsigned short );
356 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, short , short );
357 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, unsigned int , unsigned int );
358 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, int , int );
359 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, unsigned long , unsigned long );
360 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, long , long );
361 #if defined(_WIN64)
362 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, std::size_t , std::size_t );
363 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, std::ptrdiff_t, std::ptrdiff_t );
364 #endif
365 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, float , float );
366 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, double , double );
367 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned short, long double , long double );
369 //*************************************************************************************************
370 
371 
372 
373 
374 //=================================================================================================
375 //
376 // SHORT SPECIALIZATIONS
377 //
378 //=================================================================================================
379 
380 //*************************************************************************************************
382 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , unsigned char , short );
383 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , char , short );
384 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , signed char , short );
385 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , wchar_t , short );
386 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , unsigned short, short );
387 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , short , short );
388 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , unsigned int , unsigned int );
389 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , int , int );
390 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , unsigned long , unsigned long );
391 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , long , long );
392 #if defined(_WIN64)
393 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , std::size_t , std::size_t );
394 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , std::ptrdiff_t, std::ptrdiff_t );
395 #endif
396 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , float , float );
397 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , double , double );
398 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( short , long double , long double );
400 //*************************************************************************************************
401 
402 
403 
404 
405 //=================================================================================================
406 //
407 // UNSIGNED INT SPECIALIZATIONS
408 //
409 //=================================================================================================
410 
411 //*************************************************************************************************
413 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , unsigned char , unsigned int );
414 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , char , unsigned int );
415 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , signed char , unsigned int );
416 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , wchar_t , unsigned int );
417 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , unsigned short, unsigned int );
418 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , short , unsigned int );
419 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , unsigned int , unsigned int );
420 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , int , int );
421 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , unsigned long , unsigned long );
422 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , long , long );
423 #if defined(_WIN64)
424 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , std::size_t , std::size_t );
425 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , std::ptrdiff_t, std::ptrdiff_t );
426 #endif
427 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , float , float );
428 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , double , double );
429 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned int , long double , long double );
431 //*************************************************************************************************
432 
433 
434 
435 
436 //=================================================================================================
437 //
438 // INT SPECIALIZATIONS
439 //
440 //=================================================================================================
441 
442 //*************************************************************************************************
444 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , unsigned char , int );
445 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , char , int );
446 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , signed char , int );
447 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , wchar_t , int );
448 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , unsigned short, int );
449 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , short , int );
450 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , unsigned int , int );
451 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , int , int );
452 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , unsigned long , unsigned long );
453 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , long , long );
454 #if defined(_WIN64)
455 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , std::size_t , std::size_t );
456 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , std::ptrdiff_t, std::ptrdiff_t );
457 #endif
458 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , float , float );
459 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , double , double );
460 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( int , long double , long double );
462 //*************************************************************************************************
463 
464 
465 
466 
467 //=================================================================================================
468 //
469 // UNSIGNED LONG SPECIALIZATIONS
470 //
471 //=================================================================================================
472 
473 //*************************************************************************************************
475 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , unsigned char , unsigned long );
476 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , char , unsigned long );
477 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , signed char , unsigned long );
478 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , wchar_t , unsigned long );
479 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , unsigned short, unsigned long );
480 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , short , unsigned long );
481 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , unsigned int , unsigned long );
482 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , int , unsigned long );
483 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , unsigned long , unsigned long );
484 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , long , long );
485 #if defined(_WIN64)
486 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , std::size_t , std::size_t );
487 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , std::ptrdiff_t, std::ptrdiff_t );
488 #endif
489 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , float , float );
490 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , double , double );
491 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( unsigned long , long double , long double );
493 //*************************************************************************************************
494 
495 
496 
497 
498 //=================================================================================================
499 //
500 // LONG SPECIALIZATIONS
501 //
502 //=================================================================================================
503 
504 //*************************************************************************************************
506 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , unsigned char , long );
507 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , char , long );
508 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , signed char , long );
509 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , wchar_t , long );
510 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , unsigned short, long );
511 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , short , long );
512 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , unsigned int , long );
513 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , int , long );
514 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , unsigned long , long );
515 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , long , long );
516 #if defined(_WIN64)
517 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , std::size_t , std::size_t );
518 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , std::ptrdiff_t, std::ptrdiff_t );
519 #endif
520 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , float , float );
521 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , double , double );
522 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long , long double , long double );
524 //*************************************************************************************************
525 
526 
527 
528 
529 //=================================================================================================
530 //
531 // SIZE_T SPECIALIZATIONS
532 //
533 //=================================================================================================
534 
535 //*************************************************************************************************
536 #if defined(_WIN64)
537 
538 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , unsigned char , std::size_t );
539 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , char , std::size_t );
540 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , signed char , std::size_t );
541 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , wchar_t , std::size_t );
542 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , unsigned short, std::size_t );
543 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , short , std::size_t );
544 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , unsigned int , std::size_t );
545 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , int , std::size_t );
546 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , unsigned long , std::size_t );
547 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , long , std::size_t );
548 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , std::size_t , std::size_t );
549 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , std::ptrdiff_t, std::ptrdiff_t );
550 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , float , float );
551 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , double , double );
552 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::size_t , long double , long double );
554 #endif
555 //*************************************************************************************************
556 
557 
558 
559 
560 //=================================================================================================
561 //
562 // PTRDIFF_T SPECIALIZATIONS
563 //
564 //=================================================================================================
565 
566 //*************************************************************************************************
567 #if defined(_WIN64)
568 
569 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned char , std::ptrdiff_t );
570 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, char , std::ptrdiff_t );
571 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, signed char , std::ptrdiff_t );
572 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, wchar_t , std::ptrdiff_t );
573 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned short, std::ptrdiff_t );
574 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, short , std::ptrdiff_t );
575 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned int , std::ptrdiff_t );
576 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, int , std::ptrdiff_t );
577 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned long , std::ptrdiff_t );
578 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, long , std::ptrdiff_t );
579 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, std::size_t , std::ptrdiff_t );
580 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, std::ptrdiff_t, std::ptrdiff_t );
581 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, float , float );
582 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, double , double );
583 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t, long double , long double );
585 #endif
586 //*************************************************************************************************
587 
588 
589 
590 
591 //=================================================================================================
592 //
593 // FLOAT SPECIALIZATIONS
594 //
595 //=================================================================================================
596 
597 //*************************************************************************************************
599 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , unsigned char , float );
600 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , char , float );
601 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , signed char , float );
602 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , wchar_t , float );
603 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , unsigned short, float );
604 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , short , float );
605 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , unsigned int , float );
606 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , int , float );
607 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , unsigned long , float );
608 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , long , float );
609 #if defined(_WIN64)
610 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , std::size_t , float );
611 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , std::ptrdiff_t, float );
612 #endif
613 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , float , float );
614 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , double , double );
615 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( float , long double , long double );
617 //*************************************************************************************************
618 
619 
620 
621 
622 //=================================================================================================
623 //
624 // DOUBLE SPECIALIZATIONS
625 //
626 //=================================================================================================
627 
628 //*************************************************************************************************
630 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , unsigned char , double );
631 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , char , double );
632 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , signed char , double );
633 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , wchar_t , double );
634 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , unsigned short, double );
635 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , short , double );
636 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , unsigned int , double );
637 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , int , double );
638 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , unsigned long , double );
639 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , long , double );
640 #if defined(_WIN64)
641 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , std::size_t , double );
642 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , std::ptrdiff_t, double );
643 #endif
644 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , float , double );
645 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , double , double );
646 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( double , long double , long double );
648 //*************************************************************************************************
649 
650 
651 
652 
653 //=================================================================================================
654 //
655 // LONG DOUBLE SPECIALIZATIONS
656 //
657 //=================================================================================================
658 
659 //*************************************************************************************************
661 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , unsigned char , long double );
662 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , char , long double );
663 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , signed char , long double );
664 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , wchar_t , long double );
665 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , unsigned short, long double );
666 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , short , long double );
667 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , unsigned int , long double );
668 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , int , long double );
669 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , unsigned long , long double );
670 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , long , long double );
671 #if defined(_WIN64)
672 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , std::size_t , long double );
673 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , std::ptrdiff_t, long double );
674 #endif
675 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , float , long double );
676 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , double , long double );
677 BLAZE_CREATE_BUILTIN_ADDTRAIT_SPECIALIZATION( long double , long double , long double );
679 //*************************************************************************************************
680 
681 
682 
683 
684 //=================================================================================================
685 //
686 // COMPLEX SPECIALIZATIONS
687 //
688 //=================================================================================================
689 
690 //*************************************************************************************************
692 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( unsigned char );
693 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( char );
694 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( signed char );
695 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( wchar_t );
696 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( unsigned short );
697 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( short );
698 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( unsigned int );
699 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( int );
700 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( unsigned long );
701 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( long );
702 #if defined(_WIN64)
703 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( std::size_t );
704 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( std::ptrdiff_t );
705 #endif
706 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( float );
707 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( double );
708 BLAZE_CREATE_COMPLEX_ADDTRAIT_SPECIALIZATION( long double );
710 //*************************************************************************************************
711 
712 
713 //*************************************************************************************************
715 template< typename T1, typename T2 >
716 struct AddTrait< complex<T1>, complex<T2> >
717 {
718  typedef complex<typename AddTrait<T1,T2>::Type> Type;
719 };
721 //*************************************************************************************************
722 
723 } // namespace blaze
724 
725 #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.
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:142
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.