Viskores  1.0
VecOperators.h
Go to the documentation of this file.
1 //============================================================================
2 // The contents of this file are covered by the Viskores license. See
3 // LICENSE.txt for details.
4 //
5 // By contributing to this file, all contributors agree to the Developer
6 // Certificate of Origin Version 1.1 (DCO 1.1) as stated in DCO.txt.
7 //============================================================================
8 
9 //============================================================================
10 // Copyright (c) Kitware, Inc.
11 // All rights reserved.
12 // See LICENSE.txt for details.
13 //
14 // This software is distributed WITHOUT ANY WARRANTY; without even
15 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16 // PURPOSE. See the above copyright notice for more information.
17 //============================================================================
19 // This file is automatically generated by VecOperators.h.in
20 // clang-format off
21 #ifndef viskores_internal_VecOperators_h
22 #define viskores_internal_VecOperators_h
23 
25 
26 namespace viskores {
27 
28 #if (!(defined(VISKORES_CUDA) && (__CUDACC_VER_MAJOR__ < 8)))
29 #if (defined(VISKORES_GCC) || defined(VISKORES_CLANG))
30 #pragma GCC diagnostic push
31 #pragma GCC diagnostic ignored "-Wunknown-pragmas"
32 #pragma GCC diagnostic ignored "-Wpragmas"
33 #pragma GCC diagnostic ignored "-Wconversion"
34 #pragma GCC diagnostic ignored "-Wfloat-conversion"
35 #endif // gcc || clang
36 #endif // not using cuda < 8
37 
38 #if defined(VISKORES_MSVC)
39 #pragma warning(push)
40 #pragma warning(disable : 4244)
41 #endif
42 
43 
44 // operator- unary overloads for generic and specific sizes {{{
45 template <typename T, viskores::IdComponent Size>
46 inline VISKORES_EXEC_CONT
47 typename std::enable_if<(std::is_floating_point<T>::value || std::is_signed<T>::value),
50 {
51  for(int i=0; i < Size; ++i)
52  {
53  x[i] = -x[i];
54  }
55  return x;
56 }
57 
58 template <typename T>
59 inline VISKORES_EXEC_CONT
60 typename std::enable_if<(std::is_floating_point<T>::value || std::is_signed<T>::value),
61  viskores::Vec<T, 1>>::type
62 operator-(const viskores::Vec<T, 1>& x)
63 {
64  return viskores::Vec<T, 1>(-x[0]);
65 }
66 
67 template <typename T>
68 inline VISKORES_EXEC_CONT
69 typename std::enable_if<(std::is_floating_point<T>::value || std::is_signed<T>::value),
70  viskores::Vec<T, 2>>::type
71 operator-(const viskores::Vec<T, 2>& x)
72 {
73  return viskores::Vec<T, 2>(-x[0], -x[1]);
74 }
75 
76 template <typename T>
77 inline VISKORES_EXEC_CONT
78 typename std::enable_if<(std::is_floating_point<T>::value || std::is_signed<T>::value),
79  viskores::Vec<T, 3>>::type
80 operator-(const viskores::Vec<T, 3>& x)
81 {
82  return viskores::Vec<T, 3>(-x[0], -x[1], -x[2]);
83 }
84 
85 template <typename T>
86 inline VISKORES_EXEC_CONT
87 typename std::enable_if<(std::is_floating_point<T>::value || std::is_signed<T>::value),
88  viskores::Vec<T, 4>>::type
89 operator-(const viskores::Vec<T, 4>& x)
90 {
91  return viskores::Vec<T, 4>(-x[0], -x[1], -x[2], -x[3]);
92 }
93 
94 
95 //}}}
96 
97 // operator+ overloads for generic vector sizes -------------------{{{
98 // Vec_Vec for ['T', 'T']
99 template <typename T, IdComponent Size>
102 )
103 {
104  for (int i = 0; i < Size; ++i)
105  {
106  a[i] = a[i] + b[i];
107  }
108  return a;
109 }
110 
111 // Vec_Scalar for ['T', 'T']
112 template <typename T, IdComponent Size>
114  viskores::Vec<T, Size> a, T scalar
115 )
116 {
117  for (int i = 0; i < Size; ++i)
118  {
119  a[i] = a[i] + scalar;
120  }
121  return a;
122 }
123 
124 // Vec_Scalar for ['T', 'viskores::Float64']
125 template <typename T, IdComponent Size>
128 )
129 {
130  for (int i = 0; i < Size; ++i)
131  {
132  a[i] = a[i] + scalar;
133  }
134  return a;
135 }
136 
137 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
138 template <IdComponent Size>
141 )
142 {
143  for (int i = 0; i < Size; ++i)
144  {
145  a[i] = a[i] + scalar;
146  }
147  return a;
148 }
149 
150 // Scalar_Vec for ['T', 'T']
151 template <typename T, IdComponent Size>
153  T scalar, viskores::Vec<T, Size> a
154 )
155 {
156  for (int i = 0; i < Size; ++i)
157  {
158  a[i] = scalar + a[i];
159  }
160  return a;
161 }
162 
163 // Scalar_Vec for ['T', 'viskores::Float64']
164 template <typename T, IdComponent Size>
167 )
168 {
169  for (int i = 0; i < Size; ++i)
170  {
171  a[i] = scalar + a[i];
172  }
173  return a;
174 }
175 
176 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
177 template <IdComponent Size>
180 )
181 {
182  for (int i = 0; i < Size; ++i)
183  {
184  a[i] = scalar + a[i];
185  }
186  return a;
187 }
188 
189 //}}}
190 // operator* overloads for generic vector sizes -------------------{{{
191 // Vec_Vec for ['T', 'T']
192 template <typename T, IdComponent Size>
195 )
196 {
197  for (int i = 0; i < Size; ++i)
198  {
199  a[i] = a[i] * b[i];
200  }
201  return a;
202 }
203 
204 // Vec_Scalar for ['T', 'T']
205 template <typename T, IdComponent Size>
207  viskores::Vec<T, Size> a, T scalar
208 )
209 {
210  for (int i = 0; i < Size; ++i)
211  {
212  a[i] = a[i] * scalar;
213  }
214  return a;
215 }
216 
217 // Vec_Scalar for ['T', 'viskores::Float64']
218 template <typename T, IdComponent Size>
221 )
222 {
223  for (int i = 0; i < Size; ++i)
224  {
225  a[i] = a[i] * scalar;
226  }
227  return a;
228 }
229 
230 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
231 template <IdComponent Size>
234 )
235 {
236  for (int i = 0; i < Size; ++i)
237  {
238  a[i] = a[i] * scalar;
239  }
240  return a;
241 }
242 
243 // Scalar_Vec for ['T', 'T']
244 template <typename T, IdComponent Size>
246  T scalar, viskores::Vec<T, Size> a
247 )
248 {
249  for (int i = 0; i < Size; ++i)
250  {
251  a[i] = scalar * a[i];
252  }
253  return a;
254 }
255 
256 // Scalar_Vec for ['T', 'viskores::Float64']
257 template <typename T, IdComponent Size>
260 )
261 {
262  for (int i = 0; i < Size; ++i)
263  {
264  a[i] = scalar * a[i];
265  }
266  return a;
267 }
268 
269 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
270 template <IdComponent Size>
273 )
274 {
275  for (int i = 0; i < Size; ++i)
276  {
277  a[i] = scalar * a[i];
278  }
279  return a;
280 }
281 
282 //}}}
283 // operator- overloads for generic vector sizes -------------------{{{
284 // Vec_Vec for ['T', 'T']
285 template <typename T, IdComponent Size>
288 )
289 {
290  for (int i = 0; i < Size; ++i)
291  {
292  a[i] = a[i] - b[i];
293  }
294  return a;
295 }
296 
297 // Vec_Scalar for ['T', 'T']
298 template <typename T, IdComponent Size>
300  viskores::Vec<T, Size> a, T scalar
301 )
302 {
303  for (int i = 0; i < Size; ++i)
304  {
305  a[i] = a[i] - scalar;
306  }
307  return a;
308 }
309 
310 // Vec_Scalar for ['T', 'viskores::Float64']
311 template <typename T, IdComponent Size>
314 )
315 {
316  for (int i = 0; i < Size; ++i)
317  {
318  a[i] = a[i] - scalar;
319  }
320  return a;
321 }
322 
323 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
324 template <IdComponent Size>
327 )
328 {
329  for (int i = 0; i < Size; ++i)
330  {
331  a[i] = a[i] - scalar;
332  }
333  return a;
334 }
335 
336 // Scalar_Vec for ['T', 'T']
337 template <typename T, IdComponent Size>
339  T scalar, viskores::Vec<T, Size> a
340 )
341 {
342  for (int i = 0; i < Size; ++i)
343  {
344  a[i] = scalar - a[i];
345  }
346  return a;
347 }
348 
349 // Scalar_Vec for ['T', 'viskores::Float64']
350 template <typename T, IdComponent Size>
353 )
354 {
355  for (int i = 0; i < Size; ++i)
356  {
357  a[i] = scalar - a[i];
358  }
359  return a;
360 }
361 
362 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
363 template <IdComponent Size>
366 )
367 {
368  for (int i = 0; i < Size; ++i)
369  {
370  a[i] = scalar - a[i];
371  }
372  return a;
373 }
374 
375 //}}}
376 // operator/ overloads for generic vector sizes -------------------{{{
377 // Vec_Vec for ['T', 'T']
378 template <typename T, IdComponent Size>
381 )
382 {
383  for (int i = 0; i < Size; ++i)
384  {
385  a[i] = a[i] / b[i];
386  }
387  return a;
388 }
389 
390 // Vec_Scalar for ['T', 'T']
391 template <typename T, IdComponent Size>
393  viskores::Vec<T, Size> a, T scalar
394 )
395 {
396  for (int i = 0; i < Size; ++i)
397  {
398  a[i] = a[i] / scalar;
399  }
400  return a;
401 }
402 
403 // Vec_Scalar for ['T', 'viskores::Float64']
404 template <typename T, IdComponent Size>
407 )
408 {
409  for (int i = 0; i < Size; ++i)
410  {
411  a[i] = a[i] / scalar;
412  }
413  return a;
414 }
415 
416 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
417 template <IdComponent Size>
420 )
421 {
422  for (int i = 0; i < Size; ++i)
423  {
424  a[i] = a[i] / scalar;
425  }
426  return a;
427 }
428 
429 // Scalar_Vec for ['T', 'T']
430 template <typename T, IdComponent Size>
432  T scalar, viskores::Vec<T, Size> a
433 )
434 {
435  for (int i = 0; i < Size; ++i)
436  {
437  a[i] = scalar / a[i];
438  }
439  return a;
440 }
441 
442 // Scalar_Vec for ['T', 'viskores::Float64']
443 template <typename T, IdComponent Size>
446 )
447 {
448  for (int i = 0; i < Size; ++i)
449  {
450  a[i] = scalar / a[i];
451  }
452  return a;
453 }
454 
455 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
456 template <IdComponent Size>
459 )
460 {
461  for (int i = 0; i < Size; ++i)
462  {
463  a[i] = scalar / a[i];
464  }
465  return a;
466 }
467 
468 //}}}
469 
470 // operator+ overloads for specific vector sizes -------------------{{{
471 // Vec_Vec for ['T', 'T']
472 template <typename T>
474  const viskores::Vec<T, 1>& a, const viskores::Vec<T, 1>& b
475 )
476 {
477  return viskores::Vec<T, 1>(a[0] + b[0]);
478 }
479 
480 // Vec_Scalar for ['T', 'T']
481 template <typename T>
483  const viskores::Vec<T, 1>& a, T scalar
484 )
485 {
486  return viskores::Vec<T, 1>(a[0] + scalar);
487 }
488 
489 // Vec_Scalar for ['T', 'viskores::Float64']
490 template <typename T>
492  const viskores::Vec<T, 1>& a, viskores::Float64 scalar
493 )
494 {
495  return viskores::Vec<T, 1>(a[0] + scalar);
496 }
497 
498 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
501 )
502 {
503  return viskores::Vec<viskores::Float64, 1>(a[0] + scalar);
504 }
505 
506 // Scalar_Vec for ['T', 'T']
507 template <typename T>
509  T scalar, const viskores::Vec<T, 1>& a
510 )
511 {
512  return viskores::Vec<T, 1>(scalar + a[0]);
513 }
514 
515 // Scalar_Vec for ['T', 'viskores::Float64']
516 template <typename T>
518  viskores::Float64 scalar, const viskores::Vec<T, 1>& a
519 )
520 {
521  return viskores::Vec<T, 1>(scalar + a[0]);
522 }
523 
524 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
527 )
528 {
529  return viskores::Vec<viskores::Float64, 1>(scalar + a[0]);
530 }
531 
532 // Vec_Vec for ['T', 'T']
533 template <typename T>
535  const viskores::Vec<T, 2>& a, const viskores::Vec<T, 2>& b
536 )
537 {
538  return viskores::Vec<T, 2>(a[0] + b[0], a[1] + b[1]);
539 }
540 
541 // Vec_Scalar for ['T', 'T']
542 template <typename T>
544  const viskores::Vec<T, 2>& a, T scalar
545 )
546 {
547  return viskores::Vec<T, 2>(a[0] + scalar, a[1] + scalar);
548 }
549 
550 // Vec_Scalar for ['T', 'viskores::Float64']
551 template <typename T>
553  const viskores::Vec<T, 2>& a, viskores::Float64 scalar
554 )
555 {
556  return viskores::Vec<T, 2>(a[0] + scalar, a[1] + scalar);
557 }
558 
559 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
562 )
563 {
564  return viskores::Vec<viskores::Float64, 2>(a[0] + scalar, a[1] + scalar);
565 }
566 
567 // Scalar_Vec for ['T', 'T']
568 template <typename T>
570  T scalar, const viskores::Vec<T, 2>& a
571 )
572 {
573  return viskores::Vec<T, 2>(scalar + a[0], scalar + a[1]);
574 }
575 
576 // Scalar_Vec for ['T', 'viskores::Float64']
577 template <typename T>
579  viskores::Float64 scalar, const viskores::Vec<T, 2>& a
580 )
581 {
582  return viskores::Vec<T, 2>(scalar + a[0], scalar + a[1]);
583 }
584 
585 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
588 )
589 {
590  return viskores::Vec<viskores::Float64, 2>(scalar + a[0], scalar + a[1]);
591 }
592 
593 // Vec_Vec for ['T', 'T']
594 template <typename T>
596  const viskores::Vec<T, 3>& a, const viskores::Vec<T, 3>& b
597 )
598 {
599  return viskores::Vec<T, 3>(a[0] + b[0], a[1] + b[1], a[2] + b[2]);
600 }
601 
602 // Vec_Scalar for ['T', 'T']
603 template <typename T>
605  const viskores::Vec<T, 3>& a, T scalar
606 )
607 {
608  return viskores::Vec<T, 3>(a[0] + scalar, a[1] + scalar, a[2] + scalar);
609 }
610 
611 // Vec_Scalar for ['T', 'viskores::Float64']
612 template <typename T>
614  const viskores::Vec<T, 3>& a, viskores::Float64 scalar
615 )
616 {
617  return viskores::Vec<T, 3>(a[0] + scalar, a[1] + scalar, a[2] + scalar);
618 }
619 
620 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
623 )
624 {
625  return viskores::Vec<viskores::Float64, 3>(a[0] + scalar, a[1] + scalar, a[2] + scalar);
626 }
627 
628 // Scalar_Vec for ['T', 'T']
629 template <typename T>
631  T scalar, const viskores::Vec<T, 3>& a
632 )
633 {
634  return viskores::Vec<T, 3>(scalar + a[0], scalar + a[1], scalar + a[2]);
635 }
636 
637 // Scalar_Vec for ['T', 'viskores::Float64']
638 template <typename T>
640  viskores::Float64 scalar, const viskores::Vec<T, 3>& a
641 )
642 {
643  return viskores::Vec<T, 3>(scalar + a[0], scalar + a[1], scalar + a[2]);
644 }
645 
646 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
649 )
650 {
651  return viskores::Vec<viskores::Float64, 3>(scalar + a[0], scalar + a[1], scalar + a[2]);
652 }
653 
654 // Vec_Vec for ['T', 'T']
655 template <typename T>
657  const viskores::Vec<T, 4>& a, const viskores::Vec<T, 4>& b
658 )
659 {
660  return viskores::Vec<T, 4>(a[0] + b[0], a[1] + b[1], a[2] + b[2], a[3] + b[3]);
661 }
662 
663 // Vec_Scalar for ['T', 'T']
664 template <typename T>
666  const viskores::Vec<T, 4>& a, T scalar
667 )
668 {
669  return viskores::Vec<T, 4>(a[0] + scalar, a[1] + scalar, a[2] + scalar, a[3] + scalar);
670 }
671 
672 // Vec_Scalar for ['T', 'viskores::Float64']
673 template <typename T>
675  const viskores::Vec<T, 4>& a, viskores::Float64 scalar
676 )
677 {
678  return viskores::Vec<T, 4>(a[0] + scalar, a[1] + scalar, a[2] + scalar, a[3] + scalar);
679 }
680 
681 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
684 )
685 {
686  return viskores::Vec<viskores::Float64, 4>(a[0] + scalar, a[1] + scalar, a[2] + scalar, a[3] + scalar);
687 }
688 
689 // Scalar_Vec for ['T', 'T']
690 template <typename T>
692  T scalar, const viskores::Vec<T, 4>& a
693 )
694 {
695  return viskores::Vec<T, 4>(scalar + a[0], scalar + a[1], scalar + a[2], scalar + a[3]);
696 }
697 
698 // Scalar_Vec for ['T', 'viskores::Float64']
699 template <typename T>
701  viskores::Float64 scalar, const viskores::Vec<T, 4>& a
702 )
703 {
704  return viskores::Vec<T, 4>(scalar + a[0], scalar + a[1], scalar + a[2], scalar + a[3]);
705 }
706 
707 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
710 )
711 {
712  return viskores::Vec<viskores::Float64, 4>(scalar + a[0], scalar + a[1], scalar + a[2], scalar + a[3]);
713 }
714 
715 //}}}
716 // operator* overloads for specific vector sizes -------------------{{{
717 // Vec_Vec for ['T', 'T']
718 template <typename T>
720  const viskores::Vec<T, 1>& a, const viskores::Vec<T, 1>& b
721 )
722 {
723  return viskores::Vec<T, 1>(a[0] * b[0]);
724 }
725 
726 // Vec_Scalar for ['T', 'T']
727 template <typename T>
729  const viskores::Vec<T, 1>& a, T scalar
730 )
731 {
732  return viskores::Vec<T, 1>(a[0] * scalar);
733 }
734 
735 // Vec_Scalar for ['T', 'viskores::Float64']
736 template <typename T>
738  const viskores::Vec<T, 1>& a, viskores::Float64 scalar
739 )
740 {
741  return viskores::Vec<T, 1>(a[0] * scalar);
742 }
743 
744 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
747 )
748 {
749  return viskores::Vec<viskores::Float64, 1>(a[0] * scalar);
750 }
751 
752 // Scalar_Vec for ['T', 'T']
753 template <typename T>
755  T scalar, const viskores::Vec<T, 1>& a
756 )
757 {
758  return viskores::Vec<T, 1>(scalar * a[0]);
759 }
760 
761 // Scalar_Vec for ['T', 'viskores::Float64']
762 template <typename T>
764  viskores::Float64 scalar, const viskores::Vec<T, 1>& a
765 )
766 {
767  return viskores::Vec<T, 1>(scalar * a[0]);
768 }
769 
770 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
773 )
774 {
775  return viskores::Vec<viskores::Float64, 1>(scalar * a[0]);
776 }
777 
778 // Vec_Vec for ['T', 'T']
779 template <typename T>
781  const viskores::Vec<T, 2>& a, const viskores::Vec<T, 2>& b
782 )
783 {
784  return viskores::Vec<T, 2>(a[0] * b[0], a[1] * b[1]);
785 }
786 
787 // Vec_Scalar for ['T', 'T']
788 template <typename T>
790  const viskores::Vec<T, 2>& a, T scalar
791 )
792 {
793  return viskores::Vec<T, 2>(a[0] * scalar, a[1] * scalar);
794 }
795 
796 // Vec_Scalar for ['T', 'viskores::Float64']
797 template <typename T>
799  const viskores::Vec<T, 2>& a, viskores::Float64 scalar
800 )
801 {
802  return viskores::Vec<T, 2>(a[0] * scalar, a[1] * scalar);
803 }
804 
805 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
808 )
809 {
810  return viskores::Vec<viskores::Float64, 2>(a[0] * scalar, a[1] * scalar);
811 }
812 
813 // Scalar_Vec for ['T', 'T']
814 template <typename T>
816  T scalar, const viskores::Vec<T, 2>& a
817 )
818 {
819  return viskores::Vec<T, 2>(scalar * a[0], scalar * a[1]);
820 }
821 
822 // Scalar_Vec for ['T', 'viskores::Float64']
823 template <typename T>
825  viskores::Float64 scalar, const viskores::Vec<T, 2>& a
826 )
827 {
828  return viskores::Vec<T, 2>(scalar * a[0], scalar * a[1]);
829 }
830 
831 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
834 )
835 {
836  return viskores::Vec<viskores::Float64, 2>(scalar * a[0], scalar * a[1]);
837 }
838 
839 // Vec_Vec for ['T', 'T']
840 template <typename T>
842  const viskores::Vec<T, 3>& a, const viskores::Vec<T, 3>& b
843 )
844 {
845  return viskores::Vec<T, 3>(a[0] * b[0], a[1] * b[1], a[2] * b[2]);
846 }
847 
848 // Vec_Scalar for ['T', 'T']
849 template <typename T>
851  const viskores::Vec<T, 3>& a, T scalar
852 )
853 {
854  return viskores::Vec<T, 3>(a[0] * scalar, a[1] * scalar, a[2] * scalar);
855 }
856 
857 // Vec_Scalar for ['T', 'viskores::Float64']
858 template <typename T>
860  const viskores::Vec<T, 3>& a, viskores::Float64 scalar
861 )
862 {
863  return viskores::Vec<T, 3>(a[0] * scalar, a[1] * scalar, a[2] * scalar);
864 }
865 
866 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
869 )
870 {
871  return viskores::Vec<viskores::Float64, 3>(a[0] * scalar, a[1] * scalar, a[2] * scalar);
872 }
873 
874 // Scalar_Vec for ['T', 'T']
875 template <typename T>
877  T scalar, const viskores::Vec<T, 3>& a
878 )
879 {
880  return viskores::Vec<T, 3>(scalar * a[0], scalar * a[1], scalar * a[2]);
881 }
882 
883 // Scalar_Vec for ['T', 'viskores::Float64']
884 template <typename T>
886  viskores::Float64 scalar, const viskores::Vec<T, 3>& a
887 )
888 {
889  return viskores::Vec<T, 3>(scalar * a[0], scalar * a[1], scalar * a[2]);
890 }
891 
892 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
895 )
896 {
897  return viskores::Vec<viskores::Float64, 3>(scalar * a[0], scalar * a[1], scalar * a[2]);
898 }
899 
900 // Vec_Vec for ['T', 'T']
901 template <typename T>
903  const viskores::Vec<T, 4>& a, const viskores::Vec<T, 4>& b
904 )
905 {
906  return viskores::Vec<T, 4>(a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3]);
907 }
908 
909 // Vec_Scalar for ['T', 'T']
910 template <typename T>
912  const viskores::Vec<T, 4>& a, T scalar
913 )
914 {
915  return viskores::Vec<T, 4>(a[0] * scalar, a[1] * scalar, a[2] * scalar, a[3] * scalar);
916 }
917 
918 // Vec_Scalar for ['T', 'viskores::Float64']
919 template <typename T>
921  const viskores::Vec<T, 4>& a, viskores::Float64 scalar
922 )
923 {
924  return viskores::Vec<T, 4>(a[0] * scalar, a[1] * scalar, a[2] * scalar, a[3] * scalar);
925 }
926 
927 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
930 )
931 {
932  return viskores::Vec<viskores::Float64, 4>(a[0] * scalar, a[1] * scalar, a[2] * scalar, a[3] * scalar);
933 }
934 
935 // Scalar_Vec for ['T', 'T']
936 template <typename T>
938  T scalar, const viskores::Vec<T, 4>& a
939 )
940 {
941  return viskores::Vec<T, 4>(scalar * a[0], scalar * a[1], scalar * a[2], scalar * a[3]);
942 }
943 
944 // Scalar_Vec for ['T', 'viskores::Float64']
945 template <typename T>
947  viskores::Float64 scalar, const viskores::Vec<T, 4>& a
948 )
949 {
950  return viskores::Vec<T, 4>(scalar * a[0], scalar * a[1], scalar * a[2], scalar * a[3]);
951 }
952 
953 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
956 )
957 {
958  return viskores::Vec<viskores::Float64, 4>(scalar * a[0], scalar * a[1], scalar * a[2], scalar * a[3]);
959 }
960 
961 //}}}
962 // operator- overloads for specific vector sizes -------------------{{{
963 // Vec_Vec for ['T', 'T']
964 template <typename T>
966  const viskores::Vec<T, 1>& a, const viskores::Vec<T, 1>& b
967 )
968 {
969  return viskores::Vec<T, 1>(a[0] - b[0]);
970 }
971 
972 // Vec_Scalar for ['T', 'T']
973 template <typename T>
975  const viskores::Vec<T, 1>& a, T scalar
976 )
977 {
978  return viskores::Vec<T, 1>(a[0] - scalar);
979 }
980 
981 // Vec_Scalar for ['T', 'viskores::Float64']
982 template <typename T>
984  const viskores::Vec<T, 1>& a, viskores::Float64 scalar
985 )
986 {
987  return viskores::Vec<T, 1>(a[0] - scalar);
988 }
989 
990 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
993 )
994 {
995  return viskores::Vec<viskores::Float64, 1>(a[0] - scalar);
996 }
997 
998 // Scalar_Vec for ['T', 'T']
999 template <typename T>
1001  T scalar, const viskores::Vec<T, 1>& a
1002 )
1003 {
1004  return viskores::Vec<T, 1>(scalar - a[0]);
1005 }
1006 
1007 // Scalar_Vec for ['T', 'viskores::Float64']
1008 template <typename T>
1010  viskores::Float64 scalar, const viskores::Vec<T, 1>& a
1011 )
1012 {
1013  return viskores::Vec<T, 1>(scalar - a[0]);
1014 }
1015 
1016 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
1019 )
1020 {
1021  return viskores::Vec<viskores::Float64, 1>(scalar - a[0]);
1022 }
1023 
1024 // Vec_Vec for ['T', 'T']
1025 template <typename T>
1027  const viskores::Vec<T, 2>& a, const viskores::Vec<T, 2>& b
1028 )
1029 {
1030  return viskores::Vec<T, 2>(a[0] - b[0], a[1] - b[1]);
1031 }
1032 
1033 // Vec_Scalar for ['T', 'T']
1034 template <typename T>
1036  const viskores::Vec<T, 2>& a, T scalar
1037 )
1038 {
1039  return viskores::Vec<T, 2>(a[0] - scalar, a[1] - scalar);
1040 }
1041 
1042 // Vec_Scalar for ['T', 'viskores::Float64']
1043 template <typename T>
1045  const viskores::Vec<T, 2>& a, viskores::Float64 scalar
1046 )
1047 {
1048  return viskores::Vec<T, 2>(a[0] - scalar, a[1] - scalar);
1049 }
1050 
1051 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
1054 )
1055 {
1056  return viskores::Vec<viskores::Float64, 2>(a[0] - scalar, a[1] - scalar);
1057 }
1058 
1059 // Scalar_Vec for ['T', 'T']
1060 template <typename T>
1062  T scalar, const viskores::Vec<T, 2>& a
1063 )
1064 {
1065  return viskores::Vec<T, 2>(scalar - a[0], scalar - a[1]);
1066 }
1067 
1068 // Scalar_Vec for ['T', 'viskores::Float64']
1069 template <typename T>
1071  viskores::Float64 scalar, const viskores::Vec<T, 2>& a
1072 )
1073 {
1074  return viskores::Vec<T, 2>(scalar - a[0], scalar - a[1]);
1075 }
1076 
1077 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
1080 )
1081 {
1082  return viskores::Vec<viskores::Float64, 2>(scalar - a[0], scalar - a[1]);
1083 }
1084 
1085 // Vec_Vec for ['T', 'T']
1086 template <typename T>
1088  const viskores::Vec<T, 3>& a, const viskores::Vec<T, 3>& b
1089 )
1090 {
1091  return viskores::Vec<T, 3>(a[0] - b[0], a[1] - b[1], a[2] - b[2]);
1092 }
1093 
1094 // Vec_Scalar for ['T', 'T']
1095 template <typename T>
1097  const viskores::Vec<T, 3>& a, T scalar
1098 )
1099 {
1100  return viskores::Vec<T, 3>(a[0] - scalar, a[1] - scalar, a[2] - scalar);
1101 }
1102 
1103 // Vec_Scalar for ['T', 'viskores::Float64']
1104 template <typename T>
1106  const viskores::Vec<T, 3>& a, viskores::Float64 scalar
1107 )
1108 {
1109  return viskores::Vec<T, 3>(a[0] - scalar, a[1] - scalar, a[2] - scalar);
1110 }
1111 
1112 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
1115 )
1116 {
1117  return viskores::Vec<viskores::Float64, 3>(a[0] - scalar, a[1] - scalar, a[2] - scalar);
1118 }
1119 
1120 // Scalar_Vec for ['T', 'T']
1121 template <typename T>
1123  T scalar, const viskores::Vec<T, 3>& a
1124 )
1125 {
1126  return viskores::Vec<T, 3>(scalar - a[0], scalar - a[1], scalar - a[2]);
1127 }
1128 
1129 // Scalar_Vec for ['T', 'viskores::Float64']
1130 template <typename T>
1132  viskores::Float64 scalar, const viskores::Vec<T, 3>& a
1133 )
1134 {
1135  return viskores::Vec<T, 3>(scalar - a[0], scalar - a[1], scalar - a[2]);
1136 }
1137 
1138 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
1141 )
1142 {
1143  return viskores::Vec<viskores::Float64, 3>(scalar - a[0], scalar - a[1], scalar - a[2]);
1144 }
1145 
1146 // Vec_Vec for ['T', 'T']
1147 template <typename T>
1149  const viskores::Vec<T, 4>& a, const viskores::Vec<T, 4>& b
1150 )
1151 {
1152  return viskores::Vec<T, 4>(a[0] - b[0], a[1] - b[1], a[2] - b[2], a[3] - b[3]);
1153 }
1154 
1155 // Vec_Scalar for ['T', 'T']
1156 template <typename T>
1158  const viskores::Vec<T, 4>& a, T scalar
1159 )
1160 {
1161  return viskores::Vec<T, 4>(a[0] - scalar, a[1] - scalar, a[2] - scalar, a[3] - scalar);
1162 }
1163 
1164 // Vec_Scalar for ['T', 'viskores::Float64']
1165 template <typename T>
1167  const viskores::Vec<T, 4>& a, viskores::Float64 scalar
1168 )
1169 {
1170  return viskores::Vec<T, 4>(a[0] - scalar, a[1] - scalar, a[2] - scalar, a[3] - scalar);
1171 }
1172 
1173 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
1176 )
1177 {
1178  return viskores::Vec<viskores::Float64, 4>(a[0] - scalar, a[1] - scalar, a[2] - scalar, a[3] - scalar);
1179 }
1180 
1181 // Scalar_Vec for ['T', 'T']
1182 template <typename T>
1184  T scalar, const viskores::Vec<T, 4>& a
1185 )
1186 {
1187  return viskores::Vec<T, 4>(scalar - a[0], scalar - a[1], scalar - a[2], scalar - a[3]);
1188 }
1189 
1190 // Scalar_Vec for ['T', 'viskores::Float64']
1191 template <typename T>
1193  viskores::Float64 scalar, const viskores::Vec<T, 4>& a
1194 )
1195 {
1196  return viskores::Vec<T, 4>(scalar - a[0], scalar - a[1], scalar - a[2], scalar - a[3]);
1197 }
1198 
1199 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
1202 )
1203 {
1204  return viskores::Vec<viskores::Float64, 4>(scalar - a[0], scalar - a[1], scalar - a[2], scalar - a[3]);
1205 }
1206 
1207 //}}}
1208 // operator/ overloads for specific vector sizes -------------------{{{
1209 // Vec_Vec for ['T', 'T']
1210 template <typename T>
1212  const viskores::Vec<T, 1>& a, const viskores::Vec<T, 1>& b
1213 )
1214 {
1215  return viskores::Vec<T, 1>(a[0] / b[0]);
1216 }
1217 
1218 // Vec_Scalar for ['T', 'T']
1219 template <typename T>
1221  const viskores::Vec<T, 1>& a, T scalar
1222 )
1223 {
1224  return viskores::Vec<T, 1>(a[0] / scalar);
1225 }
1226 
1227 // Vec_Scalar for ['T', 'viskores::Float64']
1228 template <typename T>
1230  const viskores::Vec<T, 1>& a, viskores::Float64 scalar
1231 )
1232 {
1233  return viskores::Vec<T, 1>(a[0] / scalar);
1234 }
1235 
1236 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
1239 )
1240 {
1241  return viskores::Vec<viskores::Float64, 1>(a[0] / scalar);
1242 }
1243 
1244 // Scalar_Vec for ['T', 'T']
1245 template <typename T>
1247  T scalar, const viskores::Vec<T, 1>& a
1248 )
1249 {
1250  return viskores::Vec<T, 1>(scalar / a[0]);
1251 }
1252 
1253 // Scalar_Vec for ['T', 'viskores::Float64']
1254 template <typename T>
1256  viskores::Float64 scalar, const viskores::Vec<T, 1>& a
1257 )
1258 {
1259  return viskores::Vec<T, 1>(scalar / a[0]);
1260 }
1261 
1262 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
1265 )
1266 {
1267  return viskores::Vec<viskores::Float64, 1>(scalar / a[0]);
1268 }
1269 
1270 // Vec_Vec for ['T', 'T']
1271 template <typename T>
1273  const viskores::Vec<T, 2>& a, const viskores::Vec<T, 2>& b
1274 )
1275 {
1276  return viskores::Vec<T, 2>(a[0] / b[0], a[1] / b[1]);
1277 }
1278 
1279 // Vec_Scalar for ['T', 'T']
1280 template <typename T>
1282  const viskores::Vec<T, 2>& a, T scalar
1283 )
1284 {
1285  return viskores::Vec<T, 2>(a[0] / scalar, a[1] / scalar);
1286 }
1287 
1288 // Vec_Scalar for ['T', 'viskores::Float64']
1289 template <typename T>
1291  const viskores::Vec<T, 2>& a, viskores::Float64 scalar
1292 )
1293 {
1294  return viskores::Vec<T, 2>(a[0] / scalar, a[1] / scalar);
1295 }
1296 
1297 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
1300 )
1301 {
1302  return viskores::Vec<viskores::Float64, 2>(a[0] / scalar, a[1] / scalar);
1303 }
1304 
1305 // Scalar_Vec for ['T', 'T']
1306 template <typename T>
1308  T scalar, const viskores::Vec<T, 2>& a
1309 )
1310 {
1311  return viskores::Vec<T, 2>(scalar / a[0], scalar / a[1]);
1312 }
1313 
1314 // Scalar_Vec for ['T', 'viskores::Float64']
1315 template <typename T>
1317  viskores::Float64 scalar, const viskores::Vec<T, 2>& a
1318 )
1319 {
1320  return viskores::Vec<T, 2>(scalar / a[0], scalar / a[1]);
1321 }
1322 
1323 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
1326 )
1327 {
1328  return viskores::Vec<viskores::Float64, 2>(scalar / a[0], scalar / a[1]);
1329 }
1330 
1331 // Vec_Vec for ['T', 'T']
1332 template <typename T>
1334  const viskores::Vec<T, 3>& a, const viskores::Vec<T, 3>& b
1335 )
1336 {
1337  return viskores::Vec<T, 3>(a[0] / b[0], a[1] / b[1], a[2] / b[2]);
1338 }
1339 
1340 // Vec_Scalar for ['T', 'T']
1341 template <typename T>
1343  const viskores::Vec<T, 3>& a, T scalar
1344 )
1345 {
1346  return viskores::Vec<T, 3>(a[0] / scalar, a[1] / scalar, a[2] / scalar);
1347 }
1348 
1349 // Vec_Scalar for ['T', 'viskores::Float64']
1350 template <typename T>
1352  const viskores::Vec<T, 3>& a, viskores::Float64 scalar
1353 )
1354 {
1355  return viskores::Vec<T, 3>(a[0] / scalar, a[1] / scalar, a[2] / scalar);
1356 }
1357 
1358 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
1361 )
1362 {
1363  return viskores::Vec<viskores::Float64, 3>(a[0] / scalar, a[1] / scalar, a[2] / scalar);
1364 }
1365 
1366 // Scalar_Vec for ['T', 'T']
1367 template <typename T>
1369  T scalar, const viskores::Vec<T, 3>& a
1370 )
1371 {
1372  return viskores::Vec<T, 3>(scalar / a[0], scalar / a[1], scalar / a[2]);
1373 }
1374 
1375 // Scalar_Vec for ['T', 'viskores::Float64']
1376 template <typename T>
1378  viskores::Float64 scalar, const viskores::Vec<T, 3>& a
1379 )
1380 {
1381  return viskores::Vec<T, 3>(scalar / a[0], scalar / a[1], scalar / a[2]);
1382 }
1383 
1384 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
1387 )
1388 {
1389  return viskores::Vec<viskores::Float64, 3>(scalar / a[0], scalar / a[1], scalar / a[2]);
1390 }
1391 
1392 // Vec_Vec for ['T', 'T']
1393 template <typename T>
1395  const viskores::Vec<T, 4>& a, const viskores::Vec<T, 4>& b
1396 )
1397 {
1398  return viskores::Vec<T, 4>(a[0] / b[0], a[1] / b[1], a[2] / b[2], a[3] / b[3]);
1399 }
1400 
1401 // Vec_Scalar for ['T', 'T']
1402 template <typename T>
1404  const viskores::Vec<T, 4>& a, T scalar
1405 )
1406 {
1407  return viskores::Vec<T, 4>(a[0] / scalar, a[1] / scalar, a[2] / scalar, a[3] / scalar);
1408 }
1409 
1410 // Vec_Scalar for ['T', 'viskores::Float64']
1411 template <typename T>
1413  const viskores::Vec<T, 4>& a, viskores::Float64 scalar
1414 )
1415 {
1416  return viskores::Vec<T, 4>(a[0] / scalar, a[1] / scalar, a[2] / scalar, a[3] / scalar);
1417 }
1418 
1419 // Vec_Scalar for ['viskores::Float64', 'viskores::Float64']
1422 )
1423 {
1424  return viskores::Vec<viskores::Float64, 4>(a[0] / scalar, a[1] / scalar, a[2] / scalar, a[3] / scalar);
1425 }
1426 
1427 // Scalar_Vec for ['T', 'T']
1428 template <typename T>
1430  T scalar, const viskores::Vec<T, 4>& a
1431 )
1432 {
1433  return viskores::Vec<T, 4>(scalar / a[0], scalar / a[1], scalar / a[2], scalar / a[3]);
1434 }
1435 
1436 // Scalar_Vec for ['T', 'viskores::Float64']
1437 template <typename T>
1439  viskores::Float64 scalar, const viskores::Vec<T, 4>& a
1440 )
1441 {
1442  return viskores::Vec<T, 4>(scalar / a[0], scalar / a[1], scalar / a[2], scalar / a[3]);
1443 }
1444 
1445 // Scalar_Vec for ['viskores::Float64', 'viskores::Float64']
1448 )
1449 {
1450  return viskores::Vec<viskores::Float64, 4>(scalar / a[0], scalar / a[1], scalar / a[2], scalar / a[3]);
1451 }
1452 
1453 //}}}
1454 
1455 
1456 #if defined(VISKORES_MSVC)
1457 #pragma warning(pop)
1458 #endif
1459 
1460 #if (defined(VISKORES_CUDA) && (__CUDACC_VER_MAJOR__ < 8))
1461 #if (defined(VISKORES_GCC) || defined(VISKORES_CLANG))
1462 #pragma GCC diagnostic pop
1463 #endif // gcc || clang
1464 #endif // use cuda < 8
1465 
1466 }
1467 
1468 // clang-format on
1469 #endif //viskores_internal_VecOperators_h
viskores::operator/
VISKORES_EXEC_CONT viskores::Vec< T, Size > operator/(viskores::Vec< T, Size > a, const viskores::Vec< T, Size > &b)
Definition: VecOperators.h:379
viskores::operator+
VISKORES_EXEC_CONT viskores::Vec< T, Size > operator+(viskores::Vec< T, Size > a, const viskores::Vec< T, Size > &b)
Definition: VecOperators.h:100
viskores::operator*
VISKORES_EXEC_CONT viskores::Vec< T, Size > operator*(viskores::Vec< T, Size > a, const viskores::Vec< T, Size > &b)
Definition: VecOperators.h:193
VISKORES_EXEC_CONT
#define VISKORES_EXEC_CONT
Definition: ExportMacros.h:60
viskores::Vec< T, 3 >
Definition: Types.h:1025
viskores::Vec< T, 2 >
Definition: Types.h:909
viskores
Groups connected points that have the same field value.
Definition: Atomic.h:27
Configure.h
viskores::operator-
VISKORES_EXEC_CONT std::enable_if<(std::is_floating_point< T >::value||std::is_signed< T >::value), viskores::Vec< T, Size > >::type operator-(viskores::Vec< T, Size > x)
Definition: VecOperators.h:49
viskores::Vec< T, 1 >
Definition: Types.h:887
viskores::Vec< T, 4 >
Definition: Types.h:1143
viskores::Float64
double Float64
Base type to use for 64-bit floating-point numbers.
Definition: Types.h:169
viskores::Vec
A short fixed-length array.
Definition: Types.h:365