MathTrait.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_TRAITS_MATHTRAIT_H_
36 #define _BLAZE_MATH_TRAITS_MATHTRAIT_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 //*************************************************************************************************
135 template< typename T1, typename T2 >
136 struct MathTrait
137 {
138  private:
139  //**********************************************************************************************
141  struct Failure {
142  typedef INVALID_TYPE HighType;
143  typedef INVALID_TYPE LowType;
144  };
146  //**********************************************************************************************
147 
148  //**********************************************************************************************
150  typedef typename RemoveReference< typename RemoveCV<T1>::Type >::Type Type1;
151  typedef typename RemoveReference< typename RemoveCV<T2>::Type >::Type Type2;
152  typedef MathTrait<Type1,Type2> Helper;
154  //**********************************************************************************************
155 
156  public:
157  //**********************************************************************************************
161  , Helper, Failure >::Type::HighType HighType;
162 
163  typedef typename If< Or< IsConst<T1>, IsVolatile<T1>, IsReference<T1>
164  , IsConst<T2>, IsVolatile<T2>, IsReference<T2> >
165  , Helper, Failure >::Type::LowType LowType;
167  //**********************************************************************************************
168 };
169 //*************************************************************************************************
170 
171 
172 
173 
174 //=================================================================================================
175 //
176 // MATHTRAIT SPECIALIZATION FOR IDENTICAL TYPES
177 //
178 //=================================================================================================
179 
180 //*************************************************************************************************
190 template< typename T >
191 struct MathTrait<T,T>
192 {
193  //**********************************************************************************************
194  typedef typename RemoveReference< typename RemoveCV<T>::Type >::Type HighType;
195  typedef HighType LowType;
196  //**********************************************************************************************
197 };
199 //*************************************************************************************************
200 
201 
202 
203 
204 //=================================================================================================
205 //
206 // MATHTRAIT SPECIALIZATION MACRO
207 //
208 //=================================================================================================
209 
210 //*************************************************************************************************
217 #define BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION(T1,T2,HIGH,LOW) \
218  template<> \
219  struct MathTrait< T1, T2 > \
220  { \
221  typedef HIGH HighType; \
222  typedef LOW LowType; \
223  }
224 
225 //*************************************************************************************************
226 
227 
228 //*************************************************************************************************
235 #define BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( T1 ) \
236  template< typename T2 > \
237  struct MathTrait< T1, complex<T2> > \
238  { \
239  typedef complex<T2> HighType; \
240  typedef T1 LowType; \
241  }; \
242  template< typename T2 > \
243  struct MathTrait< complex<T2>, T1 > \
244  { \
245  typedef complex<T2> HighType; \
246  typedef T1 LowType; \
247  }
248 
249 //*************************************************************************************************
250 
251 
252 
253 
254 //=================================================================================================
255 //
256 // UNSIGNED CHAR SPECIALIZATIONS
257 //
258 //=================================================================================================
259 
260 //*************************************************************************************************
262 // Type 1 Type 2 High type Low type
263 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , unsigned char , unsigned char , unsigned char );
264 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , char , char , unsigned char );
265 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , signed char , signed char , unsigned char );
266 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , wchar_t , wchar_t , unsigned char );
267 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , unsigned short, unsigned short, unsigned char );
268 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , short , short , unsigned char );
269 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , unsigned int , unsigned int , unsigned char );
270 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , int , int , unsigned char );
271 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , unsigned long , unsigned long , unsigned char );
272 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , long , long , unsigned char );
273 #if defined(_WIN64)
274 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , std::size_t , std::size_t , unsigned char );
275 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , std::ptrdiff_t, std::ptrdiff_t, unsigned char );
276 #endif
277 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , float , float , unsigned char );
278 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , double , double , unsigned char );
279 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , long double , long double , unsigned char );
281 //*************************************************************************************************
282 
283 
284 
285 
286 //=================================================================================================
287 //
288 // CHAR SPECIALIZATIONS
289 //
290 //=================================================================================================
291 
292 //*************************************************************************************************
294 // Type 1 Type 2 High type Low type
295 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , unsigned char , char , unsigned char );
296 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , char , char , char );
297 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , signed char , signed char , char );
298 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , wchar_t , wchar_t , char );
299 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , unsigned short, unsigned short, char );
300 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , short , short , char );
301 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , unsigned int , unsigned int , char );
302 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , int , int , char );
303 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , unsigned long , unsigned long , char );
304 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , long , long , char );
305 #if defined(_WIN64)
306 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , std::size_t , std::size_t , char );
307 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , std::ptrdiff_t, std::ptrdiff_t, char );
308 #endif
309 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , float , float , char );
310 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , double , double , char );
311 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , long double , long double , char );
313 //*************************************************************************************************
314 
315 
316 
317 
318 //=================================================================================================
319 //
320 // SIGNED CHAR SPECIALIZATIONS
321 //
322 //=================================================================================================
323 
324 //*************************************************************************************************
326 // Type 1 Type 2 High type Low type
327 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , unsigned char , signed char , unsigned char );
328 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , char , signed char , char );
329 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , signed char , signed char , signed char );
330 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , wchar_t , wchar_t , signed char );
331 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , unsigned short, unsigned short, signed char );
332 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , short , short , signed char );
333 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , unsigned int , unsigned int , signed char );
334 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , int , int , signed char );
335 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , unsigned long , unsigned long , signed char );
336 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , long , long , signed char );
337 #if defined(_WIN64)
338 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , std::size_t , std::size_t , signed char );
339 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , std::ptrdiff_t, std::ptrdiff_t, signed char );
340 #endif
341 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , float , float , signed char );
342 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , double , double , signed char );
343 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , long double , long double , signed char );
345 //*************************************************************************************************
346 
347 
348 
349 
350 //=================================================================================================
351 //
352 // WCHAR_T SPECIALIZATIONS
353 //
354 //=================================================================================================
355 
356 //*************************************************************************************************
358 // Type 1 Type 2 High type Low type
359 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , unsigned char , wchar_t , unsigned char );
360 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , char , wchar_t , char );
361 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , signed char , wchar_t , signed char );
362 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , wchar_t , wchar_t , wchar_t );
363 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , unsigned short, unsigned short, wchar_t );
364 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , short , short , wchar_t );
365 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , unsigned int , unsigned int , wchar_t );
366 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , int , int , wchar_t );
367 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , unsigned long , unsigned long , wchar_t );
368 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , long , long , wchar_t );
369 #if defined(_WIN64)
370 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , std::size_t , std::size_t , wchar_t );
371 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , std::ptrdiff_t, std::ptrdiff_t, wchar_t );
372 #endif
373 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , float , float , wchar_t );
374 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , double , double , wchar_t );
375 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , long double , long double , wchar_t );
377 //*************************************************************************************************
378 
379 
380 
381 
382 //=================================================================================================
383 //
384 // UNSIGNED SHORT SPECIALIZATIONS
385 //
386 //=================================================================================================
387 
388 //*************************************************************************************************
390 // Type 1 Type 2 High type Low type
391 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, unsigned char , unsigned short, unsigned char );
392 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, char , unsigned short, char );
393 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, signed char , unsigned short, signed char );
394 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, wchar_t , unsigned short, wchar_t );
395 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, unsigned short, unsigned short, unsigned short );
396 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, short , short , unsigned short );
397 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, unsigned int , unsigned int , unsigned short );
398 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, int , int , unsigned short );
399 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, unsigned long , unsigned long , unsigned short );
400 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, long , long , unsigned short );
401 #if defined(_WIN64)
402 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, std::size_t , std::size_t , unsigned short );
403 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, std::ptrdiff_t, std::ptrdiff_t, unsigned short );
404 #endif
405 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, float , float , unsigned short );
406 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, double , double , unsigned short );
407 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, long double , long double , unsigned short );
409 //*************************************************************************************************
410 
411 
412 
413 
414 //=================================================================================================
415 //
416 // SHORT SPECIALIZATIONS
417 //
418 //=================================================================================================
419 
420 //*************************************************************************************************
422 // Type 1 Type 2 High type Low type
423 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , unsigned char , short , unsigned char );
424 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , char , short , char );
425 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , signed char , short , signed char );
426 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , wchar_t , short , wchar_t );
427 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , unsigned short, short , unsigned short );
428 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , short , short , short );
429 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , unsigned int , unsigned int , short );
430 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , int , int , short );
431 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , unsigned long , unsigned long , short );
432 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , long , long , short );
433 #if defined(_WIN64)
434 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , std::size_t , std::size_t , short );
435 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , std::ptrdiff_t, std::ptrdiff_t, short );
436 #endif
437 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , float , float , short );
438 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , double , double , short );
439 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , long double , long double , short );
441 //*************************************************************************************************
442 
443 
444 
445 
446 //=================================================================================================
447 //
448 // UNSIGNED INT SPECIALIZATIONS
449 //
450 //=================================================================================================
451 
452 //*************************************************************************************************
454 // Type 1 Type 2 High type Low type
455 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , unsigned char , unsigned int , unsigned char );
456 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , char , unsigned int , char );
457 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , signed char , unsigned int , signed char );
458 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , wchar_t , unsigned int , wchar_t );
459 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , unsigned short, unsigned int , unsigned short );
460 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , short , unsigned int , short );
461 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , unsigned int , unsigned int , unsigned int );
462 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , int , int , unsigned int );
463 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , unsigned long , unsigned long , unsigned int );
464 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , long , long , unsigned int );
465 #if defined(_WIN64)
466 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , std::size_t , std::size_t , unsigned int );
467 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , std::ptrdiff_t, std::ptrdiff_t, unsigned int );
468 #endif
469 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , float , float , unsigned int );
470 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , double , double , unsigned int );
471 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , long double , long double , unsigned int );
473 //*************************************************************************************************
474 
475 
476 
477 
478 //=================================================================================================
479 //
480 // INT SPECIALIZATIONS
481 //
482 //=================================================================================================
483 
484 //*************************************************************************************************
486 // Type 1 Type 2 High type Low type
487 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , unsigned char , int , unsigned char );
488 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , char , int , wchar_t );
489 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , signed char , int , signed char );
490 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , wchar_t , int , wchar_t );
491 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , unsigned short, int , unsigned short );
492 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , short , int , short );
493 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , unsigned int , int , unsigned int );
494 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , int , int , int );
495 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , unsigned long , unsigned long , int );
496 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , long , long , int );
497 #if defined(_WIN64)
498 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , std::size_t , std::size_t , int );
499 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , std::ptrdiff_t, std::ptrdiff_t, int );
500 #endif
501 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , float , float , int );
502 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , double , double , int );
503 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , long double , long double , int );
505 //*************************************************************************************************
506 
507 
508 
509 
510 //=================================================================================================
511 //
512 // UNSIGNED LONG SPECIALIZATIONS
513 //
514 //=================================================================================================
515 
516 //*************************************************************************************************
518 // Type 1 Type 2 High type Low type
519 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , unsigned char , unsigned long , unsigned char );
520 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , char , unsigned long , char );
521 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , signed char , unsigned long , signed char );
522 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , wchar_t , unsigned long , wchar_t );
523 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , unsigned short, unsigned long , unsigned short );
524 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , short , unsigned long , short );
525 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , unsigned int , unsigned long , unsigned int );
526 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , int , unsigned long , int );
527 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , unsigned long , unsigned long , unsigned long );
528 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , long , long , unsigned long );
529 #if defined(_WIN64)
530 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , std::size_t , std::size_t , unsigned long );
531 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , std::ptrdiff_t, std::ptrdiff_t, unsigned long );
532 #endif
533 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , float , float , unsigned long );
534 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , double , double , unsigned long );
535 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , long double , long double , unsigned long );
537 //*************************************************************************************************
538 
539 
540 
541 
542 //=================================================================================================
543 //
544 // LONG SPECIALIZATIONS
545 //
546 //=================================================================================================
547 
548 //*************************************************************************************************
550 // Type 1 Type 2 High type Low type
551 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , unsigned char , long , unsigned char );
552 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , char , long , char );
553 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , signed char , long , signed char );
554 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , wchar_t , long , wchar_t );
555 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , unsigned short, long , unsigned short );
556 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , short , long , short );
557 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , unsigned int , long , unsigned int );
558 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , int , long , int );
559 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , unsigned long , long , unsigned long );
560 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , long , long , long );
561 #if defined(_WIN64)
562 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , std::size_t , std::size_t , long );
563 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , std::ptrdiff_t, std::ptrdiff_t, long );
564 #endif
565 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , float , float , long );
566 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , double , double , long );
567 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , long double , long double , long );
569 //*************************************************************************************************
570 
571 
572 
573 
574 //=================================================================================================
575 //
576 // SIZE_T SPECIALIZATIONS
577 //
578 //=================================================================================================
579 
580 //*************************************************************************************************
581 #if defined(_WIN64)
582 
583 // Type 1 Type 2 High type Low type
584 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , unsigned char , std::size_t , unsigned char );
585 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , char , std::size_t , char );
586 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , signed char , std::size_t , signed char );
587 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , wchar_t , std::size_t , wchar_t );
588 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , unsigned short, std::size_t , unsigned short );
589 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , short , std::size_t , short );
590 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , unsigned int , std::size_t , unsigned int );
591 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , int , std::size_t , int );
592 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , unsigned long , std::size_t , unsigned long );
593 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , long , std::size_t , long );
594 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , std::size_t , std::size_t , std::size_t );
595 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , std::ptrdiff_t, std::ptrdiff_t, std::size_t );
596 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , float , float , std::size_t );
597 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , double , double , std::size_t );
598 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , long double , long double , std::size_t );
600 #endif
601 //*************************************************************************************************
602 
603 
604 
605 
606 //=================================================================================================
607 //
608 // PTRDIFF_T SPECIALIZATIONS
609 //
610 //=================================================================================================
611 
612 //*************************************************************************************************
613 #if defined(_WIN64)
614 
615 // Type 1 Type 2 High type Low type
616 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned char , std::ptrdiff_t, unsigned char );
617 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, char , std::ptrdiff_t, char );
618 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, signed char , std::ptrdiff_t, signed char );
619 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, wchar_t , std::ptrdiff_t, wchar_t );
620 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned short, std::ptrdiff_t, unsigned short );
621 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, short , std::ptrdiff_t, short );
622 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned int , std::ptrdiff_t, unsigned int );
623 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, int , std::ptrdiff_t, int );
624 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned long , std::ptrdiff_t, unsigned long );
625 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, long , std::ptrdiff_t, long );
626 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, std::size_t , std::ptrdiff_t, std::size_t );
627 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, std::ptrdiff_t, std::ptrdiff_t, std::ptrdiff_t );
628 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, float , float , std::ptrdiff_t );
629 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, double , double , std::ptrdiff_t );
630 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, long double , long double , std::ptrdiff_t );
632 #endif
633 //*************************************************************************************************
634 
635 
636 
637 
638 //=================================================================================================
639 //
640 // FLOAT SPECIALIZATIONS
641 //
642 //=================================================================================================
643 
644 //*************************************************************************************************
646 // Type 1 Type 2 High type Low type
647 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , unsigned char , float , unsigned char );
648 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , char , float , char );
649 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , signed char , float , signed char );
650 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , wchar_t , float , wchar_t );
651 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , unsigned short, float , unsigned short );
652 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , short , float , short );
653 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , unsigned int , float , unsigned int );
654 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , int , float , int );
655 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , unsigned long , float , unsigned long );
656 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , long , float , long );
657 #if defined(_WIN64)
658 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , std::size_t , float , std::size_t );
659 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , std::ptrdiff_t, float , std::ptrdiff_t );
660 #endif
661 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , float , float , float );
662 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , double , double , float );
663 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , long double , long double , float );
665 //*************************************************************************************************
666 
667 
668 
669 
670 //=================================================================================================
671 //
672 // DOUBLE SPECIALIZATIONS
673 //
674 //=================================================================================================
675 
676 //*************************************************************************************************
678 // Type 1 Type 2 High type Low type
679 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , unsigned char , double , unsigned char );
680 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , char , double , char );
681 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , signed char , double , signed char );
682 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , wchar_t , double , wchar_t );
683 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , unsigned short, double , unsigned short );
684 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , short , double , short );
685 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , unsigned int , double , unsigned int );
686 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , int , double , int );
687 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , unsigned long , double , unsigned long );
688 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , long , double , long );
689 #if defined(_WIN64)
690 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , std::size_t , double , std::size_t );
691 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , std::ptrdiff_t, double , std::ptrdiff_t );
692 #endif
693 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , float , double , float );
694 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , double , double , double );
695 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , long double , long double , double );
697 //*************************************************************************************************
698 
699 
700 
701 
702 //=================================================================================================
703 //
704 // LONG DOUBLE SPECIALIZATIONS
705 //
706 //=================================================================================================
707 
708 //*************************************************************************************************
710 // Type 1 Type 2 High type Low type
711 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , unsigned char , long double , unsigned char );
712 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , char , long double , char );
713 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , signed char , long double , signed char );
714 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , wchar_t , long double , wchar_t );
715 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , unsigned short, long double , unsigned short );
716 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , short , long double , short );
717 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , unsigned int , long double , unsigned int );
718 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , int , long double , int );
719 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , unsigned long , long double , unsigned long );
720 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , long , long double , long );
721 #if defined(_WIN64)
722 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , std::size_t , long double , std::size_t );
723 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , std::ptrdiff_t, long double , std::ptrdiff_t );
724 #endif
725 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , float , long double , float );
726 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , double , long double , double );
727 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , long double , long double , long double );
729 //*************************************************************************************************
730 
731 
732 
733 
734 //=================================================================================================
735 //
736 // COMPLEX SPECIALIZATIONS
737 //
738 //=================================================================================================
739 
740 //*************************************************************************************************
742 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( unsigned char );
743 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( char );
744 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( signed char );
745 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( wchar_t );
746 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( unsigned short );
747 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( short );
748 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( unsigned int );
749 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( int );
750 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( unsigned long );
751 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( long );
752 #if defined(_WIN64)
753 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( std::size_t );
754 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t );
755 #endif
756 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( float );
757 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( double );
758 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( long double );
760 //*************************************************************************************************
761 
762 
763 //*************************************************************************************************
765 template< typename T1, typename T2 >
766 struct MathTrait< complex<T1>, complex<T2> >
767 {
768  typedef complex<typename MathTrait<T1,T2>::HighType> HighType;
769  typedef complex<typename MathTrait<T1,T2>::LowType> LowType;
770 };
772 //*************************************************************************************************
773 
774 } // namespace blaze
775 
776 #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.
Base template for the MathTrait class.
Definition: MathTrait.h:136
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.
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.