All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MathTrait.h
Go to the documentation of this file.
1 //=================================================================================================
20 //=================================================================================================
21 
22 #ifndef _BLAZE_MATH_TRAITS_MATHTRAIT_H_
23 #define _BLAZE_MATH_TRAITS_MATHTRAIT_H_
24 
25 
26 //*************************************************************************************************
27 // Includes
28 //*************************************************************************************************
29 
30 #include <cstddef>
31 #include <blaze/util/Complex.h>
32 #include <blaze/util/InvalidType.h>
33 #include <blaze/util/SelectType.h>
39 
40 
41 namespace blaze {
42 
43 //=================================================================================================
44 //
45 // CLASS DEFINITION
46 //
47 //=================================================================================================
48 
49 //*************************************************************************************************
113 template< typename T1, typename T2 >
114 struct MathTrait
115 {
116  private:
117  //**********************************************************************************************
119  struct Failure {
120  typedef INVALID_TYPE HighType;
121  typedef INVALID_TYPE LowType;
122  };
124  //**********************************************************************************************
125 
126  //**********************************************************************************************
131  //**********************************************************************************************
132 
133  //**********************************************************************************************
135  typedef typename RemoveReference< typename RemoveCV<T1>::Type >::Type Type1;
136  typedef typename RemoveReference< typename RemoveCV<T2>::Type >::Type Type2;
137  typedef MathTrait<Type1,Type2> Helper;
139  //**********************************************************************************************
140 
141  public:
142  //**********************************************************************************************
147  //**********************************************************************************************
148 };
149 //*************************************************************************************************
150 
151 
152 
153 
154 //=================================================================================================
155 //
156 // MATHTRAIT SPECIALIZATION MACRO
157 //
158 //=================================================================================================
159 
160 //*************************************************************************************************
167 #define BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION(T1,T2,HIGH,LOW) \
168  template<> \
169  struct MathTrait< T1, T2 > \
170  { \
171  typedef HIGH HighType; \
172  typedef LOW LowType; \
173  }
174 
175 //*************************************************************************************************
176 
177 
178 //*************************************************************************************************
185 #define BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( T1 ) \
186  template< typename T2 > \
187  struct MathTrait< T1, complex<T2> > \
188  { \
189  typedef complex<T2> HighType; \
190  typedef T1 LowType; \
191  }; \
192  template< typename T2 > \
193  struct MathTrait< complex<T2>, T1 > \
194  { \
195  typedef complex<T2> HighType; \
196  typedef T1 LowType; \
197  }
198 
199 //*************************************************************************************************
200 
201 
202 
203 
204 //=================================================================================================
205 //
206 // UNSIGNED CHAR SPECIALIZATIONS
207 //
208 //=================================================================================================
209 
210 //*************************************************************************************************
212 // Type 1 Type 2 High type Low type
213 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , unsigned char , unsigned char , unsigned char );
214 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , char , char , unsigned char );
215 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , signed char , signed char , unsigned char );
216 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , wchar_t , wchar_t , unsigned char );
217 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , unsigned short, unsigned short, unsigned char );
218 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , short , short , unsigned char );
219 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , unsigned int , unsigned int , unsigned char );
220 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , int , int , unsigned char );
221 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , unsigned long , unsigned long , unsigned char );
222 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , long , long , unsigned char );
223 #if defined(_WIN64)
224 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , std::size_t , std::size_t , unsigned char );
225 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , std::ptrdiff_t, std::ptrdiff_t, unsigned char );
226 #endif
227 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , float , float , unsigned char );
228 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , double , double , unsigned char );
229 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned char , long double , long double , unsigned char );
231 //*************************************************************************************************
232 
233 
234 
235 
236 //=================================================================================================
237 //
238 // CHAR SPECIALIZATIONS
239 //
240 //=================================================================================================
241 
242 //*************************************************************************************************
244 // Type 1 Type 2 High type Low type
245 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , unsigned char , char , unsigned char );
246 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , char , char , char );
247 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , signed char , signed char , char );
248 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , wchar_t , wchar_t , char );
249 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , unsigned short, unsigned short, char );
250 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , short , short , char );
251 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , unsigned int , unsigned int , char );
252 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , int , int , char );
253 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , unsigned long , unsigned long , char );
254 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , long , long , char );
255 #if defined(_WIN64)
256 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , std::size_t , std::size_t , char );
257 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , std::ptrdiff_t, std::ptrdiff_t, char );
258 #endif
259 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , float , float , char );
260 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , double , double , char );
261 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( char , long double , long double , char );
263 //*************************************************************************************************
264 
265 
266 
267 
268 //=================================================================================================
269 //
270 // SIGNED CHAR SPECIALIZATIONS
271 //
272 //=================================================================================================
273 
274 //*************************************************************************************************
276 // Type 1 Type 2 High type Low type
277 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , unsigned char , signed char , unsigned char );
278 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , char , signed char , char );
279 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , signed char , signed char , signed char );
280 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , wchar_t , wchar_t , signed char );
281 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , unsigned short, unsigned short, signed char );
282 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , short , short , signed char );
283 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , unsigned int , unsigned int , signed char );
284 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , int , int , signed char );
285 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , unsigned long , unsigned long , signed char );
286 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , long , long , signed char );
287 #if defined(_WIN64)
288 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , std::size_t , std::size_t , signed char );
289 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , std::ptrdiff_t, std::ptrdiff_t, signed char );
290 #endif
291 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , float , float , signed char );
292 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , double , double , signed char );
293 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( signed char , long double , long double , signed char );
295 //*************************************************************************************************
296 
297 
298 
299 
300 //=================================================================================================
301 //
302 // WCHAR_T SPECIALIZATIONS
303 //
304 //=================================================================================================
305 
306 //*************************************************************************************************
308 // Type 1 Type 2 High type Low type
309 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , unsigned char , wchar_t , unsigned char );
310 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , char , wchar_t , char );
311 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , signed char , wchar_t , signed char );
312 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , wchar_t , wchar_t , wchar_t );
313 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , unsigned short, unsigned short, wchar_t );
314 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , short , short , wchar_t );
315 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , unsigned int , unsigned int , wchar_t );
316 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , int , int , wchar_t );
317 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , unsigned long , unsigned long , wchar_t );
318 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , long , long , wchar_t );
319 #if defined(_WIN64)
320 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , std::size_t , std::size_t , wchar_t );
321 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , std::ptrdiff_t, std::ptrdiff_t, wchar_t );
322 #endif
323 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , float , float , wchar_t );
324 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , double , double , wchar_t );
325 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( wchar_t , long double , long double , wchar_t );
327 //*************************************************************************************************
328 
329 
330 
331 
332 //=================================================================================================
333 //
334 // UNSIGNED SHORT SPECIALIZATIONS
335 //
336 //=================================================================================================
337 
338 //*************************************************************************************************
340 // Type 1 Type 2 High type Low type
341 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, unsigned char , unsigned short, unsigned char );
342 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, char , unsigned short, char );
343 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, signed char , unsigned short, signed char );
344 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, wchar_t , unsigned short, wchar_t );
345 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, unsigned short, unsigned short, unsigned short );
346 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, short , short , unsigned short );
347 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, unsigned int , unsigned int , unsigned short );
348 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, int , int , unsigned short );
349 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, unsigned long , unsigned long , unsigned short );
350 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, long , long , unsigned short );
351 #if defined(_WIN64)
352 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, std::size_t , std::size_t , unsigned short );
353 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, std::ptrdiff_t, std::ptrdiff_t, unsigned short );
354 #endif
355 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, float , float , unsigned short );
356 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, double , double , unsigned short );
357 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned short, long double , long double , unsigned short );
359 //*************************************************************************************************
360 
361 
362 
363 
364 //=================================================================================================
365 //
366 // SHORT SPECIALIZATIONS
367 //
368 //=================================================================================================
369 
370 //*************************************************************************************************
372 // Type 1 Type 2 High type Low type
373 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , unsigned char , short , unsigned char );
374 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , char , short , char );
375 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , signed char , short , signed char );
376 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , wchar_t , short , wchar_t );
377 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , unsigned short, short , unsigned short );
378 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , short , short , short );
379 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , unsigned int , unsigned int , short );
380 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , int , int , short );
381 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , unsigned long , unsigned long , short );
382 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , long , long , short );
383 #if defined(_WIN64)
384 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , std::size_t , std::size_t , short );
385 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , std::ptrdiff_t, std::ptrdiff_t, short );
386 #endif
387 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , float , float , short );
388 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , double , double , short );
389 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( short , long double , long double , short );
391 //*************************************************************************************************
392 
393 
394 
395 
396 //=================================================================================================
397 //
398 // UNSIGNED INT SPECIALIZATIONS
399 //
400 //=================================================================================================
401 
402 //*************************************************************************************************
404 // Type 1 Type 2 High type Low type
405 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , unsigned char , unsigned int , unsigned char );
406 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , char , unsigned int , char );
407 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , signed char , unsigned int , signed char );
408 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , wchar_t , unsigned int , wchar_t );
409 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , unsigned short, unsigned int , unsigned short );
410 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , short , unsigned int , short );
411 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , unsigned int , unsigned int , unsigned int );
412 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , int , int , unsigned int );
413 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , unsigned long , unsigned long , unsigned int );
414 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , long , long , unsigned int );
415 #if defined(_WIN64)
416 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , std::size_t , std::size_t , unsigned int );
417 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , std::ptrdiff_t, std::ptrdiff_t, unsigned int );
418 #endif
419 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , float , float , unsigned int );
420 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , double , double , unsigned int );
421 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned int , long double , long double , unsigned int );
423 //*************************************************************************************************
424 
425 
426 
427 
428 //=================================================================================================
429 //
430 // INT SPECIALIZATIONS
431 //
432 //=================================================================================================
433 
434 //*************************************************************************************************
436 // Type 1 Type 2 High type Low type
437 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , unsigned char , int , unsigned char );
438 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , char , int , wchar_t );
439 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , signed char , int , signed char );
440 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , wchar_t , int , wchar_t );
441 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , unsigned short, int , unsigned short );
442 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , short , int , short );
443 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , unsigned int , int , unsigned int );
444 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , int , int , int );
445 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , unsigned long , unsigned long , int );
446 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , long , long , int );
447 #if defined(_WIN64)
448 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , std::size_t , std::size_t , int );
449 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , std::ptrdiff_t, std::ptrdiff_t, int );
450 #endif
451 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , float , float , int );
452 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , double , double , int );
453 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( int , long double , long double , int );
455 //*************************************************************************************************
456 
457 
458 
459 
460 //=================================================================================================
461 //
462 // UNSIGNED LONG SPECIALIZATIONS
463 //
464 //=================================================================================================
465 
466 //*************************************************************************************************
468 // Type 1 Type 2 High type Low type
469 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , unsigned char , unsigned long , unsigned char );
470 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , char , unsigned long , char );
471 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , signed char , unsigned long , signed char );
472 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , wchar_t , unsigned long , wchar_t );
473 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , unsigned short, unsigned long , unsigned short );
474 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , short , unsigned long , short );
475 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , unsigned int , unsigned long , unsigned int );
476 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , int , unsigned long , int );
477 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , unsigned long , unsigned long , unsigned long );
478 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , long , long , unsigned long );
479 #if defined(_WIN64)
480 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , std::size_t , std::size_t , unsigned long );
481 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , std::ptrdiff_t, std::ptrdiff_t, unsigned long );
482 #endif
483 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , float , float , unsigned long );
484 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , double , double , unsigned long );
485 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( unsigned long , long double , long double , unsigned long );
487 //*************************************************************************************************
488 
489 
490 
491 
492 //=================================================================================================
493 //
494 // LONG SPECIALIZATIONS
495 //
496 //=================================================================================================
497 
498 //*************************************************************************************************
500 // Type 1 Type 2 High type Low type
501 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , unsigned char , long , unsigned char );
502 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , char , long , char );
503 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , signed char , long , signed char );
504 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , wchar_t , long , wchar_t );
505 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , unsigned short, long , unsigned short );
506 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , short , long , short );
507 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , unsigned int , long , unsigned int );
508 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , int , long , int );
509 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , unsigned long , long , unsigned long );
510 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , long , long , long );
511 #if defined(_WIN64)
512 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , std::size_t , std::size_t , long );
513 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , std::ptrdiff_t, std::ptrdiff_t, long );
514 #endif
515 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , float , float , long );
516 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , double , double , long );
517 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long , long double , long double , long );
519 //*************************************************************************************************
520 
521 
522 
523 
524 //=================================================================================================
525 //
526 // SIZE_T SPECIALIZATIONS
527 //
528 //=================================================================================================
529 
530 //*************************************************************************************************
531 #if defined(_WIN64)
532 
533 // Type 1 Type 2 High type Low type
534 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , unsigned char , std::size_t , unsigned char );
535 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , char , std::size_t , char );
536 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , signed char , std::size_t , signed char );
537 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , wchar_t , std::size_t , wchar_t );
538 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , unsigned short, std::size_t , unsigned short );
539 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , short , std::size_t , short );
540 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , unsigned int , std::size_t , unsigned int );
541 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , int , std::size_t , int );
542 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , unsigned long , std::size_t , unsigned long );
543 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , long , std::size_t , long );
544 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , std::size_t , std::size_t , std::size_t );
545 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , std::ptrdiff_t, std::ptrdiff_t, std::size_t );
546 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , float , float , std::size_t );
547 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , double , double , std::size_t );
548 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::size_t , long double , long double , std::size_t );
550 #endif
551 //*************************************************************************************************
552 
553 
554 
555 
556 //=================================================================================================
557 //
558 // PTRDIFF_T SPECIALIZATIONS
559 //
560 //=================================================================================================
561 
562 //*************************************************************************************************
563 #if defined(_WIN64)
564 
565 // Type 1 Type 2 High type Low type
566 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned char , std::ptrdiff_t, unsigned char );
567 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, char , std::ptrdiff_t, char );
568 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, signed char , std::ptrdiff_t, signed char );
569 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, wchar_t , std::ptrdiff_t, wchar_t );
570 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned short, std::ptrdiff_t, unsigned short );
571 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, short , std::ptrdiff_t, short );
572 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned int , std::ptrdiff_t, unsigned int );
573 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, int , std::ptrdiff_t, int );
574 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned long , std::ptrdiff_t, unsigned long );
575 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, long , std::ptrdiff_t, long );
576 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, std::size_t , std::ptrdiff_t, std::size_t );
577 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, std::ptrdiff_t, std::ptrdiff_t, std::ptrdiff_t );
578 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, float , float , std::ptrdiff_t );
579 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, double , double , std::ptrdiff_t );
580 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t, long double , long double , std::ptrdiff_t );
582 #endif
583 //*************************************************************************************************
584 
585 
586 
587 
588 //=================================================================================================
589 //
590 // FLOAT SPECIALIZATIONS
591 //
592 //=================================================================================================
593 
594 //*************************************************************************************************
596 // Type 1 Type 2 High type Low type
597 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , unsigned char , float , unsigned char );
598 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , char , float , char );
599 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , signed char , float , signed char );
600 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , wchar_t , float , wchar_t );
601 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , unsigned short, float , unsigned short );
602 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , short , float , short );
603 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , unsigned int , float , unsigned int );
604 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , int , float , int );
605 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , unsigned long , float , unsigned long );
606 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , long , float , long );
607 #if defined(_WIN64)
608 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , std::size_t , float , std::size_t );
609 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , std::ptrdiff_t, float , std::ptrdiff_t );
610 #endif
611 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , float , float , float );
612 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , double , double , float );
613 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( float , long double , long double , float );
615 //*************************************************************************************************
616 
617 
618 
619 
620 //=================================================================================================
621 //
622 // DOUBLE SPECIALIZATIONS
623 //
624 //=================================================================================================
625 
626 //*************************************************************************************************
628 // Type 1 Type 2 High type Low type
629 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , unsigned char , double , unsigned char );
630 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , char , double , char );
631 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , signed char , double , signed char );
632 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , wchar_t , double , wchar_t );
633 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , unsigned short, double , unsigned short );
634 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , short , double , short );
635 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , unsigned int , double , unsigned int );
636 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , int , double , int );
637 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , unsigned long , double , unsigned long );
638 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , long , double , long );
639 #if defined(_WIN64)
640 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , std::size_t , double , std::size_t );
641 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , std::ptrdiff_t, double , std::ptrdiff_t );
642 #endif
643 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , float , double , float );
644 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , double , double , double );
645 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( double , long double , long double , double );
647 //*************************************************************************************************
648 
649 
650 
651 
652 //=================================================================================================
653 //
654 // LONG DOUBLE SPECIALIZATIONS
655 //
656 //=================================================================================================
657 
658 //*************************************************************************************************
660 // Type 1 Type 2 High type Low type
661 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , unsigned char , long double , unsigned char );
662 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , char , long double , char );
663 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , signed char , long double , signed char );
664 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , wchar_t , long double , wchar_t );
665 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , unsigned short, long double , unsigned short );
666 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , short , long double , short );
667 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , unsigned int , long double , unsigned int );
668 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , int , long double , int );
669 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , unsigned long , long double , unsigned long );
670 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , long , long double , long );
671 #if defined(_WIN64)
672 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , std::size_t , long double , std::size_t );
673 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , std::ptrdiff_t, long double , std::ptrdiff_t );
674 #endif
675 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , float , long double , float );
676 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , double , long double , double );
677 BLAZE_CREATE_BUILTIN_MATHTRAIT_SPECIALIZATION( long double , long double , long double , long double );
679 //*************************************************************************************************
680 
681 
682 
683 
684 //=================================================================================================
685 //
686 // COMPLEX SPECIALIZATIONS
687 //
688 //=================================================================================================
689 
690 //*************************************************************************************************
692 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( unsigned char );
693 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( char );
694 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( signed char );
695 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( wchar_t );
696 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( unsigned short );
697 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( short );
698 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( unsigned int );
699 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( int );
700 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( unsigned long );
701 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( long );
702 #if defined(_WIN64)
703 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( std::size_t );
704 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( std::ptrdiff_t );
705 #endif
706 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( float );
707 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( double );
708 BLAZE_CREATE_COMPLEX_MATHTRAIT_SPECIALIZATION( long double );
710 //*************************************************************************************************
711 
712 
713 //*************************************************************************************************
715 template< typename T1, typename T2 >
716 struct MathTrait< complex<T1>, complex<T2> >
717 {
718  typedef complex<typename MathTrait<T1,T2>::HighType> HighType;
719  typedef complex<typename MathTrait<T1,T2>::LowType> LowType;
720 };
722 //*************************************************************************************************
723 
724 } // namespace blaze
725 
726 #endif