QDP++
QDPOperators.h
Go to the documentation of this file.
1// -*- C++ -*-
2// $Id: Header.h,v 1.3 2002-10-14 02:06:56 edwards Exp $
3
7
8#ifndef QDPOPS_H
9#define QDPOPS_H
10
12//
13// WARNING: THIS FILE WAS GENERATED AUTOMATICALLY!
14// YOU SHOULD MODIFY THE INPUT FILES INSTEAD OF CHANGING THIS FILE DIRECTLY!
15//
16// THE FOLLOWING INPUT FILES WERE USED TO MAKE THIS FILE:
17//
18// MakeOperators
19// QDPOps.in
20// QDPClasses.in
21//
23
24
26{
28 template<class T>
30 operator()(const T &a) const
31 {
32 return (adj(a));
33 }
34};
35
37{
39 template<class T>
41 operator()(const T &a) const
42 {
43 return (conj(a));
44 }
45};
46
48{
50 template<class T>
52 operator()(const T &a) const
53 {
54 return (transpose(a));
55 }
56};
57
59{
61 template<class T>
63 operator()(const T &a) const
64 {
65 return (transposeColor(a));
66 }
67};
68
70{
72 template<class T>
74 operator()(const T &a) const
75 {
76 return (transposeSpin(a));
77 }
78};
79
80struct FnTrace
81{
83 template<class T>
85 operator()(const T &a) const
86 {
87 return (trace(a));
88 }
89};
90
92{
94 template<class T>
96 operator()(const T &a) const
97 {
98 return (realTrace(a));
99 }
100};
101
103{
105 template<class T>
107 operator()(const T &a) const
108 {
109 return (imagTrace(a));
110 }
111};
112
114{
116 template<class T>
118 operator()(const T &a) const
119 {
120 return (traceColor(a));
121 }
122};
123
125{
127 template<class T>
129 operator()(const T &a) const
130 {
131 return (traceSpin(a));
132 }
133};
134
135struct FnReal
136{
138 template<class T>
139 inline typename UnaryReturn<T, FnReal >::Type_t
140 operator()(const T &a) const
141 {
142 return (real(a));
143 }
144};
145
146struct FnImag
147{
149 template<class T>
150 inline typename UnaryReturn<T, FnImag >::Type_t
151 operator()(const T &a) const
152 {
153 return (imag(a));
154 }
155};
156
158{
160 template<class T>
162 operator()(const T &a) const
163 {
164 return (localNorm2(a));
165 }
166};
167
169{
171 template<class T>
173 operator()(const T &a) const
174 {
175 return (timesI(a));
176 }
177};
178
180{
182 template<class T>
184 operator()(const T &a) const
185 {
186 return (timesMinusI(a));
187 }
188};
189
191{
193 template<class T>
195 operator()(const T &a) const
196 {
197 return (seedToFloat(a));
198 }
199};
200
202{
204 template<class T>
206 operator()(const T &a) const
207 {
208 return (spinProjectDir0Plus(a));
209 }
210};
211
213{
215 template<class T>
217 operator()(const T &a) const
218 {
219 return (spinProjectDir1Plus(a));
220 }
221};
222
224{
226 template<class T>
228 operator()(const T &a) const
229 {
230 return (spinProjectDir2Plus(a));
231 }
232};
233
235{
237 template<class T>
239 operator()(const T &a) const
240 {
241 return (spinProjectDir3Plus(a));
242 }
243};
244
246{
248 template<class T>
250 operator()(const T &a) const
251 {
252 return (spinProjectDir0Minus(a));
253 }
254};
255
257{
259 template<class T>
261 operator()(const T &a) const
262 {
263 return (spinProjectDir1Minus(a));
264 }
265};
266
268{
270 template<class T>
272 operator()(const T &a) const
273 {
274 return (spinProjectDir2Minus(a));
275 }
276};
277
279{
281 template<class T>
283 operator()(const T &a) const
284 {
285 return (spinProjectDir3Minus(a));
286 }
287};
288
290{
292 template<class T>
294 operator()(const T &a) const
295 {
296 return (spinReconstructDir0Plus(a));
297 }
298};
299
301{
303 template<class T>
305 operator()(const T &a) const
306 {
307 return (spinReconstructDir1Plus(a));
308 }
309};
310
312{
314 template<class T>
316 operator()(const T &a) const
317 {
318 return (spinReconstructDir2Plus(a));
319 }
320};
321
323{
325 template<class T>
327 operator()(const T &a) const
328 {
329 return (spinReconstructDir3Plus(a));
330 }
331};
332
334{
336 template<class T>
338 operator()(const T &a) const
339 {
340 return (spinReconstructDir0Minus(a));
341 }
342};
343
345{
347 template<class T>
349 operator()(const T &a) const
350 {
351 return (spinReconstructDir1Minus(a));
352 }
353};
354
356{
358 template<class T>
360 operator()(const T &a) const
361 {
362 return (spinReconstructDir2Minus(a));
363 }
364};
365
367{
369 template<class T>
371 operator()(const T &a) const
372 {
373 return (spinReconstructDir3Minus(a));
374 }
375};
376
378{
380 template<class T>
382 operator()(const T &a) const
383 {
384 return (chiralProjectPlus(a));
385 }
386};
387
389{
391 template<class T>
393 operator()(const T &a) const
394 {
395 return (chiralProjectMinus(a));
396 }
397};
398
400{
402 template<class T1, class T2>
404 operator()(const T1 &a, const T2 &b) const
405 {
406 return (cmplx(a,b));
407 }
408};
409
411{
413 template<class T1, class T2>
415 operator()(const T1 &a, const T2 &b) const
416 {
417 return (outerProduct(a,b));
418 }
419};
420
422{
424 template<class T1, class T2>
426 operator()(const T1 &a, const T2 &b) const
427 {
428 return (colorVectorContract(a,b));
429 }
430};
431
433{
435 template<class T1, class T2>
437 operator()(const T1 &a, const T2 &b) const
438 {
439 return (colorCrossProduct(a,b));
440 }
441};
442
444{
446 template<class T1, class T2>
448 operator()(const T1 &a, const T2 &b) const
449 {
450 return (localInnerProduct(a,b));
451 }
452};
453
455{
457 template<class T1, class T2>
459 operator()(const T1 &a, const T2 &b) const
460 {
461 return (localInnerProductReal(a,b));
462 }
463};
464
466{
468 template<class T1, class T2>
470 operator()(const T1 &a, const T2 &b) const
471 {
472 return (localColorInnerProduct(a,b));
473 }
474};
475
477{
479 template<class T1, class T2>
481 operator()(const T1 &a, const T2 &b) const
482 {
483 return (quarkContract13(a,b));
484 }
485};
486
488{
490 template<class T1, class T2>
492 operator()(const T1 &a, const T2 &b) const
493 {
494 return (quarkContract14(a,b));
495 }
496};
497
499{
501 template<class T1, class T2>
503 operator()(const T1 &a, const T2 &b) const
504 {
505 return (quarkContract23(a,b));
506 }
507};
508
510{
512 template<class T1, class T2>
514 operator()(const T1 &a, const T2 &b) const
515 {
516 return (quarkContract24(a,b));
517 }
518};
519
521{
523 template<class T1, class T2>
525 operator()(const T1 &a, const T2 &b) const
526 {
527 return (quarkContract12(a,b));
528 }
529};
530
532{
534 template<class T1, class T2>
536 operator()(const T1 &a, const T2 &b) const
537 {
538 return (quarkContract34(a,b));
539 }
540};
541
543{
545 template<class T1, class T2, class T3>
548 operator()(const T1 &a, const T2 &b, const T3 &c) const
549 {
550 return (colorContract(a,b,c));
551 }
552};
553
555
557template<class T1,class C1>
558inline typename MakeReturn<UnaryNode<FnAdjoint,
559 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
561adj(const QDPType<T1,C1> & l)
562{
563 typedef UnaryNode<FnAdjoint,
564 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
565 typedef typename UnaryReturn<C1,FnAdjoint >::Type_t Container_t;
567 CreateLeaf<QDPType<T1,C1> >::make(l)));
568}
569
571
573template<class T1,class C1>
574inline typename MakeReturn<UnaryNode<FnConjugate,
575 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
577conj(const QDPType<T1,C1> & l)
578{
579 typedef UnaryNode<FnConjugate,
580 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
581 typedef typename UnaryReturn<C1,FnConjugate >::Type_t Container_t;
583 CreateLeaf<QDPType<T1,C1> >::make(l)));
584}
585
587
589template<class T1,class C1>
590inline typename MakeReturn<UnaryNode<FnTranspose,
591 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
593transpose(const QDPType<T1,C1> & l)
594{
595 typedef UnaryNode<FnTranspose,
596 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
597 typedef typename UnaryReturn<C1,FnTranspose >::Type_t Container_t;
599 CreateLeaf<QDPType<T1,C1> >::make(l)));
600}
601
603
605template<class T1,class C1>
607 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
609transposeColor(const QDPType<T1,C1> & l)
610{
612 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
613 typedef typename UnaryReturn<C1,FnTransposeColor >::Type_t Container_t;
615 CreateLeaf<QDPType<T1,C1> >::make(l)));
616}
617
619
621template<class T1,class C1>
622inline typename MakeReturn<UnaryNode<FnTransposeSpin,
623 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
625transposeSpin(const QDPType<T1,C1> & l)
626{
628 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
629 typedef typename UnaryReturn<C1,FnTransposeSpin >::Type_t Container_t;
631 CreateLeaf<QDPType<T1,C1> >::make(l)));
632}
633
635
637template<class T1,class C1>
638inline typename MakeReturn<UnaryNode<FnTrace,
639 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
641trace(const QDPType<T1,C1> & l)
642{
643 typedef UnaryNode<FnTrace,
644 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
645 typedef typename UnaryReturn<C1,FnTrace >::Type_t Container_t;
647 CreateLeaf<QDPType<T1,C1> >::make(l)));
648}
649
651
654template<class T1,class C1>
655inline typename MakeReturn<UnaryNode<FnRealTrace,
656 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
658realTrace(const QDPType<T1,C1> & l)
659{
660 typedef UnaryNode<FnRealTrace,
661 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
662 typedef typename UnaryReturn<C1,FnRealTrace >::Type_t Container_t;
664 CreateLeaf<QDPType<T1,C1> >::make(l)));
665}
666
668
671template<class T1,class C1>
672inline typename MakeReturn<UnaryNode<FnImagTrace,
673 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
675imagTrace(const QDPType<T1,C1> & l)
676{
677 typedef UnaryNode<FnImagTrace,
678 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
679 typedef typename UnaryReturn<C1,FnImagTrace >::Type_t Container_t;
681 CreateLeaf<QDPType<T1,C1> >::make(l)));
682}
683
685
688template<class T1,class C1>
689inline typename MakeReturn<UnaryNode<FnTraceColor,
690 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
692traceColor(const QDPType<T1,C1> & l)
693{
694 typedef UnaryNode<FnTraceColor,
695 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
696 typedef typename UnaryReturn<C1,FnTraceColor >::Type_t Container_t;
698 CreateLeaf<QDPType<T1,C1> >::make(l)));
699}
700
702
705template<class T1,class C1>
706inline typename MakeReturn<UnaryNode<FnTraceSpin,
707 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
709traceSpin(const QDPType<T1,C1> & l)
710{
711 typedef UnaryNode<FnTraceSpin,
712 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
713 typedef typename UnaryReturn<C1,FnTraceSpin >::Type_t Container_t;
715 CreateLeaf<QDPType<T1,C1> >::make(l)));
716}
717
719
721template<class T1,class C1>
722inline typename MakeReturn<UnaryNode<FnReal,
723 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
725real(const QDPType<T1,C1> & l)
726{
727 typedef UnaryNode<FnReal,
728 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
729 typedef typename UnaryReturn<C1,FnReal >::Type_t Container_t;
731 CreateLeaf<QDPType<T1,C1> >::make(l)));
732}
733
735
737template<class T1,class C1>
738inline typename MakeReturn<UnaryNode<FnImag,
739 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
741imag(const QDPType<T1,C1> & l)
742{
743 typedef UnaryNode<FnImag,
744 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
745 typedef typename UnaryReturn<C1,FnImag >::Type_t Container_t;
747 CreateLeaf<QDPType<T1,C1> >::make(l)));
748}
749
751
756template<class T1,class C1>
757inline typename MakeReturn<UnaryNode<FnLocalNorm2,
758 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
760localNorm2(const QDPType<T1,C1> & l)
761{
762 typedef UnaryNode<FnLocalNorm2,
763 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
764 typedef typename UnaryReturn<C1,FnLocalNorm2 >::Type_t Container_t;
766 CreateLeaf<QDPType<T1,C1> >::make(l)));
767}
768
770
774template<class T1,class C1>
775inline typename MakeReturn<UnaryNode<FnTimesI,
776 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
778timesI(const QDPType<T1,C1> & l)
779{
780 typedef UnaryNode<FnTimesI,
781 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
782 typedef typename UnaryReturn<C1,FnTimesI >::Type_t Container_t;
784 CreateLeaf<QDPType<T1,C1> >::make(l)));
785}
786
788
792template<class T1,class C1>
793inline typename MakeReturn<UnaryNode<FnTimesMinusI,
794 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
796timesMinusI(const QDPType<T1,C1> & l)
797{
798 typedef UnaryNode<FnTimesMinusI,
799 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
800 typedef typename UnaryReturn<C1,FnTimesMinusI >::Type_t Container_t;
802 CreateLeaf<QDPType<T1,C1> >::make(l)));
803}
804
806
810template<class T1,class C1>
811inline typename MakeReturn<UnaryNode<FnSeedToFloat,
812 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
814seedToFloat(const QDPType<T1,C1> & l)
815{
816 typedef UnaryNode<FnSeedToFloat,
817 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
818 typedef typename UnaryReturn<C1,FnSeedToFloat >::Type_t Container_t;
820 CreateLeaf<QDPType<T1,C1> >::make(l)));
821}
822
824
829template<class T1,class C1>
831 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
833spinProjectDir0Plus(const QDPType<T1,C1> & l)
834{
836 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
837 typedef typename UnaryReturn<C1,FnSpinProjectDir0Plus >::Type_t Container_t;
839 CreateLeaf<QDPType<T1,C1> >::make(l)));
840}
841
843
848template<class T1,class C1>
850 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
852spinProjectDir1Plus(const QDPType<T1,C1> & l)
853{
855 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
856 typedef typename UnaryReturn<C1,FnSpinProjectDir1Plus >::Type_t Container_t;
858 CreateLeaf<QDPType<T1,C1> >::make(l)));
859}
860
862
867template<class T1,class C1>
869 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
871spinProjectDir2Plus(const QDPType<T1,C1> & l)
872{
874 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
875 typedef typename UnaryReturn<C1,FnSpinProjectDir2Plus >::Type_t Container_t;
877 CreateLeaf<QDPType<T1,C1> >::make(l)));
878}
879
881
886template<class T1,class C1>
888 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
890spinProjectDir3Plus(const QDPType<T1,C1> & l)
891{
893 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
894 typedef typename UnaryReturn<C1,FnSpinProjectDir3Plus >::Type_t Container_t;
896 CreateLeaf<QDPType<T1,C1> >::make(l)));
897}
898
900
905template<class T1,class C1>
907 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
909spinProjectDir0Minus(const QDPType<T1,C1> & l)
910{
912 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
913 typedef typename UnaryReturn<C1,FnSpinProjectDir0Minus >::Type_t Container_t;
915 CreateLeaf<QDPType<T1,C1> >::make(l)));
916}
917
919
924template<class T1,class C1>
926 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
928spinProjectDir1Minus(const QDPType<T1,C1> & l)
929{
931 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
932 typedef typename UnaryReturn<C1,FnSpinProjectDir1Minus >::Type_t Container_t;
934 CreateLeaf<QDPType<T1,C1> >::make(l)));
935}
936
938
943template<class T1,class C1>
945 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
947spinProjectDir2Minus(const QDPType<T1,C1> & l)
948{
950 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
951 typedef typename UnaryReturn<C1,FnSpinProjectDir2Minus >::Type_t Container_t;
953 CreateLeaf<QDPType<T1,C1> >::make(l)));
954}
955
957
962template<class T1,class C1>
964 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
966spinProjectDir3Minus(const QDPType<T1,C1> & l)
967{
969 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
970 typedef typename UnaryReturn<C1,FnSpinProjectDir3Minus >::Type_t Container_t;
972 CreateLeaf<QDPType<T1,C1> >::make(l)));
973}
974
976
981template<class T1,class C1>
983 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
985spinReconstructDir0Plus(const QDPType<T1,C1> & l)
986{
988 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
989 typedef typename UnaryReturn<C1,FnSpinReconstructDir0Plus >::Type_t Container_t;
991 CreateLeaf<QDPType<T1,C1> >::make(l)));
992}
993
995
1000template<class T1,class C1>
1002 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1004spinReconstructDir1Plus(const QDPType<T1,C1> & l)
1005{
1007 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1008 typedef typename UnaryReturn<C1,FnSpinReconstructDir1Plus >::Type_t Container_t;
1010 CreateLeaf<QDPType<T1,C1> >::make(l)));
1011}
1012
1014
1019template<class T1,class C1>
1021 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1023spinReconstructDir2Plus(const QDPType<T1,C1> & l)
1024{
1026 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1027 typedef typename UnaryReturn<C1,FnSpinReconstructDir2Plus >::Type_t Container_t;
1029 CreateLeaf<QDPType<T1,C1> >::make(l)));
1030}
1031
1033
1038template<class T1,class C1>
1040 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1042spinReconstructDir3Plus(const QDPType<T1,C1> & l)
1043{
1045 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1046 typedef typename UnaryReturn<C1,FnSpinReconstructDir3Plus >::Type_t Container_t;
1048 CreateLeaf<QDPType<T1,C1> >::make(l)));
1049}
1050
1052
1057template<class T1,class C1>
1059 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1061spinReconstructDir0Minus(const QDPType<T1,C1> & l)
1062{
1064 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1065 typedef typename UnaryReturn<C1,FnSpinReconstructDir0Minus >::Type_t Container_t;
1067 CreateLeaf<QDPType<T1,C1> >::make(l)));
1068}
1069
1071
1076template<class T1,class C1>
1078 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1080spinReconstructDir1Minus(const QDPType<T1,C1> & l)
1081{
1083 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1084 typedef typename UnaryReturn<C1,FnSpinReconstructDir1Minus >::Type_t Container_t;
1086 CreateLeaf<QDPType<T1,C1> >::make(l)));
1087}
1088
1090
1095template<class T1,class C1>
1097 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1099spinReconstructDir2Minus(const QDPType<T1,C1> & l)
1100{
1102 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1103 typedef typename UnaryReturn<C1,FnSpinReconstructDir2Minus >::Type_t Container_t;
1105 CreateLeaf<QDPType<T1,C1> >::make(l)));
1106}
1107
1109
1114template<class T1,class C1>
1116 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1118spinReconstructDir3Minus(const QDPType<T1,C1> & l)
1119{
1121 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1122 typedef typename UnaryReturn<C1,FnSpinReconstructDir3Minus >::Type_t Container_t;
1124 CreateLeaf<QDPType<T1,C1> >::make(l)));
1125}
1126
1128
1133template<class T1,class C1>
1135 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1137chiralProjectPlus(const QDPType<T1,C1> & l)
1138{
1140 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1141 typedef typename UnaryReturn<C1,FnChiralProjectPlus >::Type_t Container_t;
1143 CreateLeaf<QDPType<T1,C1> >::make(l)));
1144}
1145
1147
1152template<class T1,class C1>
1154 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1156chiralProjectMinus(const QDPType<T1,C1> & l)
1157{
1159 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1160 typedef typename UnaryReturn<C1,FnChiralProjectMinus >::Type_t Container_t;
1162 CreateLeaf<QDPType<T1,C1> >::make(l)));
1163}
1164
1166
1168template<class T1,class C1>
1169inline typename MakeReturn<UnaryNode<FnArcCos,
1170 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1172acos(const QDPType<T1,C1> & l)
1173{
1174 typedef UnaryNode<FnArcCos,
1175 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1176 typedef typename UnaryReturn<C1,FnArcCos >::Type_t Container_t;
1178 CreateLeaf<QDPType<T1,C1> >::make(l)));
1179}
1180
1182
1184template<class T1,class C1>
1185inline typename MakeReturn<UnaryNode<FnArcSin,
1186 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1188asin(const QDPType<T1,C1> & l)
1189{
1190 typedef UnaryNode<FnArcSin,
1191 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1192 typedef typename UnaryReturn<C1,FnArcSin >::Type_t Container_t;
1194 CreateLeaf<QDPType<T1,C1> >::make(l)));
1195}
1196
1198
1200template<class T1,class C1>
1201inline typename MakeReturn<UnaryNode<FnArcTan,
1202 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1204atan(const QDPType<T1,C1> & l)
1205{
1206 typedef UnaryNode<FnArcTan,
1207 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1208 typedef typename UnaryReturn<C1,FnArcTan >::Type_t Container_t;
1210 CreateLeaf<QDPType<T1,C1> >::make(l)));
1211}
1212
1214
1216template<class T1,class C1>
1217inline typename MakeReturn<UnaryNode<FnCeil,
1218 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1220ceil(const QDPType<T1,C1> & l)
1221{
1222 typedef UnaryNode<FnCeil,
1223 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1224 typedef typename UnaryReturn<C1,FnCeil >::Type_t Container_t;
1226 CreateLeaf<QDPType<T1,C1> >::make(l)));
1227}
1228
1230
1232template<class T1,class C1>
1233inline typename MakeReturn<UnaryNode<FnCos,
1234 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1236cos(const QDPType<T1,C1> & l)
1237{
1238 typedef UnaryNode<FnCos,
1239 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1240 typedef typename UnaryReturn<C1,FnCos >::Type_t Container_t;
1242 CreateLeaf<QDPType<T1,C1> >::make(l)));
1243}
1244
1246
1248template<class T1,class C1>
1249inline typename MakeReturn<UnaryNode<FnHypCos,
1250 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1252cosh(const QDPType<T1,C1> & l)
1253{
1254 typedef UnaryNode<FnHypCos,
1255 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1256 typedef typename UnaryReturn<C1,FnHypCos >::Type_t Container_t;
1258 CreateLeaf<QDPType<T1,C1> >::make(l)));
1259}
1260
1262
1264template<class T1,class C1>
1265inline typename MakeReturn<UnaryNode<FnExp,
1266 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1268exp(const QDPType<T1,C1> & l)
1269{
1270 typedef UnaryNode<FnExp,
1271 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1272 typedef typename UnaryReturn<C1,FnExp >::Type_t Container_t;
1274 CreateLeaf<QDPType<T1,C1> >::make(l)));
1275}
1276
1278
1280template<class T1,class C1>
1281inline typename MakeReturn<UnaryNode<FnFabs,
1282 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1284fabs(const QDPType<T1,C1> & l)
1285{
1286 typedef UnaryNode<FnFabs,
1287 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1288 typedef typename UnaryReturn<C1,FnFabs >::Type_t Container_t;
1290 CreateLeaf<QDPType<T1,C1> >::make(l)));
1291}
1292
1294
1296template<class T1,class C1>
1297inline typename MakeReturn<UnaryNode<FnFloor,
1298 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1300floor(const QDPType<T1,C1> & l)
1301{
1302 typedef UnaryNode<FnFloor,
1303 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1304 typedef typename UnaryReturn<C1,FnFloor >::Type_t Container_t;
1306 CreateLeaf<QDPType<T1,C1> >::make(l)));
1307}
1308
1310
1312template<class T1,class C1>
1313inline typename MakeReturn<UnaryNode<FnLog,
1314 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1316log(const QDPType<T1,C1> & l)
1317{
1318 typedef UnaryNode<FnLog,
1319 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1320 typedef typename UnaryReturn<C1,FnLog >::Type_t Container_t;
1322 CreateLeaf<QDPType<T1,C1> >::make(l)));
1323}
1324
1326
1328template<class T1,class C1>
1329inline typename MakeReturn<UnaryNode<FnLog10,
1330 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1332log10(const QDPType<T1,C1> & l)
1333{
1334 typedef UnaryNode<FnLog10,
1335 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1336 typedef typename UnaryReturn<C1,FnLog10 >::Type_t Container_t;
1338 CreateLeaf<QDPType<T1,C1> >::make(l)));
1339}
1340
1342
1344template<class T1,class C1>
1345inline typename MakeReturn<UnaryNode<FnSin,
1346 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1348sin(const QDPType<T1,C1> & l)
1349{
1350 typedef UnaryNode<FnSin,
1351 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1352 typedef typename UnaryReturn<C1,FnSin >::Type_t Container_t;
1354 CreateLeaf<QDPType<T1,C1> >::make(l)));
1355}
1356
1358
1360template<class T1,class C1>
1361inline typename MakeReturn<UnaryNode<FnHypSin,
1362 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1364sinh(const QDPType<T1,C1> & l)
1365{
1366 typedef UnaryNode<FnHypSin,
1367 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1368 typedef typename UnaryReturn<C1,FnHypSin >::Type_t Container_t;
1370 CreateLeaf<QDPType<T1,C1> >::make(l)));
1371}
1372
1374
1376template<class T1,class C1>
1377inline typename MakeReturn<UnaryNode<FnSqrt,
1378 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1380sqrt(const QDPType<T1,C1> & l)
1381{
1382 typedef UnaryNode<FnSqrt,
1383 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1384 typedef typename UnaryReturn<C1,FnSqrt >::Type_t Container_t;
1386 CreateLeaf<QDPType<T1,C1> >::make(l)));
1387}
1388
1390
1392template<class T1,class C1>
1393inline typename MakeReturn<UnaryNode<FnTan,
1394 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1396tan(const QDPType<T1,C1> & l)
1397{
1398 typedef UnaryNode<FnTan,
1399 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1400 typedef typename UnaryReturn<C1,FnTan >::Type_t Container_t;
1402 CreateLeaf<QDPType<T1,C1> >::make(l)));
1403}
1404
1406
1408template<class T1,class C1>
1409inline typename MakeReturn<UnaryNode<FnHypTan,
1410 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1412tanh(const QDPType<T1,C1> & l)
1413{
1414 typedef UnaryNode<FnHypTan,
1415 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1416 typedef typename UnaryReturn<C1,FnHypTan >::Type_t Container_t;
1418 CreateLeaf<QDPType<T1,C1> >::make(l)));
1419}
1420
1422
1426template<class T1,class C1>
1427inline typename MakeReturn<UnaryNode<OpUnaryMinus,
1428 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1430operator-(const QDPType<T1,C1> & l)
1431{
1432 typedef UnaryNode<OpUnaryMinus,
1433 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1434 typedef typename UnaryReturn<C1,OpUnaryMinus >::Type_t Container_t;
1436 CreateLeaf<QDPType<T1,C1> >::make(l)));
1437}
1438
1440
1444template<class T1,class C1>
1445inline typename MakeReturn<UnaryNode<OpUnaryPlus,
1446 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1448operator+(const QDPType<T1,C1> & l)
1449{
1450 typedef UnaryNode<OpUnaryPlus,
1451 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1452 typedef typename UnaryReturn<C1,OpUnaryPlus >::Type_t Container_t;
1454 CreateLeaf<QDPType<T1,C1> >::make(l)));
1455}
1456
1458
1462template<class T1,class C1>
1463inline typename MakeReturn<UnaryNode<OpBitwiseNot,
1464 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1466operator~(const QDPType<T1,C1> & l)
1467{
1468 typedef UnaryNode<OpBitwiseNot,
1469 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1470 typedef typename UnaryReturn<C1,OpBitwiseNot >::Type_t Container_t;
1472 CreateLeaf<QDPType<T1,C1> >::make(l)));
1473}
1474
1476
1480template<class T1,class C1>
1481inline typename MakeReturn<UnaryNode<OpIdentity,
1482 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1484PETE_identity(const QDPType<T1,C1> & l)
1485{
1486 typedef UnaryNode<OpIdentity,
1487 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1488 typedef typename UnaryReturn<C1,OpIdentity >::Type_t Container_t;
1490 CreateLeaf<QDPType<T1,C1> >::make(l)));
1491}
1492
1494
1498template<class T1,class C1>
1499inline typename MakeReturn<UnaryNode<OpNot,
1500 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t>,
1502operator!(const QDPType<T1,C1> & l)
1503{
1504 typedef UnaryNode<OpNot,
1505 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t> Tree_t;
1506 typedef typename UnaryReturn<C1,OpNot >::Type_t Container_t;
1508 CreateLeaf<QDPType<T1,C1> >::make(l)));
1509}
1510
1512
1518template<class T1,class C1,class T2,class C2>
1519inline typename MakeReturn<BinaryNode<FnCmplx,
1520 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1521 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1523cmplx(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1524{
1525 typedef BinaryNode<FnCmplx,
1526 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1527 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1528 typedef typename BinaryReturn<C1,C2,FnCmplx>::Type_t Container_t;
1530 CreateLeaf<QDPType<T1,C1> >::make(l),
1531 CreateLeaf<QDPType<T2,C2> >::make(r)));
1532}
1533
1535
1542template<class T1,class C1,class T2,class C2>
1543inline typename MakeReturn<BinaryNode<FnOuterProduct,
1544 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1545 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1547outerProduct(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1548{
1549 typedef BinaryNode<FnOuterProduct,
1550 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1551 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1552 typedef typename BinaryReturn<C1,C2,FnOuterProduct>::Type_t Container_t;
1554 CreateLeaf<QDPType<T1,C1> >::make(l),
1555 CreateLeaf<QDPType<T2,C2> >::make(r)));
1556}
1557
1559
1566template<class T1,class C1,class T2,class C2>
1568 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1569 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1571colorVectorContract(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1572{
1574 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1575 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1576 typedef typename BinaryReturn<C1,C2,FnColorVectorContract>::Type_t Container_t;
1578 CreateLeaf<QDPType<T1,C1> >::make(l),
1579 CreateLeaf<QDPType<T2,C2> >::make(r)));
1580}
1581
1583
1590template<class T1,class C1,class T2,class C2>
1592 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1593 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1595colorCrossProduct(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1596{
1598 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1599 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1600 typedef typename BinaryReturn<C1,C2,FnColorCrossProduct>::Type_t Container_t;
1602 CreateLeaf<QDPType<T1,C1> >::make(l),
1603 CreateLeaf<QDPType<T2,C2> >::make(r)));
1604}
1605
1607
1612template<class T1,class C1,class T2,class C2>
1614 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1615 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1617localInnerProduct(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1618{
1620 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1621 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1622 typedef typename BinaryReturn<C1,C2,FnLocalInnerProduct>::Type_t Container_t;
1624 CreateLeaf<QDPType<T1,C1> >::make(l),
1625 CreateLeaf<QDPType<T2,C2> >::make(r)));
1626}
1627
1629
1634template<class T1,class C1,class T2,class C2>
1636 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1637 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1639localInnerProductReal(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1640{
1642 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1643 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1644 typedef typename BinaryReturn<C1,C2,FnLocalInnerProductReal>::Type_t Container_t;
1646 CreateLeaf<QDPType<T1,C1> >::make(l),
1647 CreateLeaf<QDPType<T2,C2> >::make(r)));
1648}
1649
1651
1656template<class T1,class C1,class T2,class C2>
1658 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1659 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1661localColorInnerProduct(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1662{
1664 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1665 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1666 typedef typename BinaryReturn<C1,C2,FnLocalColorInnerProduct>::Type_t Container_t;
1668 CreateLeaf<QDPType<T1,C1> >::make(l),
1669 CreateLeaf<QDPType<T2,C2> >::make(r)));
1670}
1671
1673
1690template<class T1,class C1,class T2,class C2>
1692 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1693 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1695quarkContract13(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1696{
1698 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1699 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1700 typedef typename BinaryReturn<C1,C2,FnQuarkContract13>::Type_t Container_t;
1702 CreateLeaf<QDPType<T1,C1> >::make(l),
1703 CreateLeaf<QDPType<T2,C2> >::make(r)));
1704}
1705
1707
1724template<class T1,class C1,class T2,class C2>
1726 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1727 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1729quarkContract14(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1730{
1732 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1733 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1734 typedef typename BinaryReturn<C1,C2,FnQuarkContract14>::Type_t Container_t;
1736 CreateLeaf<QDPType<T1,C1> >::make(l),
1737 CreateLeaf<QDPType<T2,C2> >::make(r)));
1738}
1739
1741
1758template<class T1,class C1,class T2,class C2>
1760 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1761 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1763quarkContract23(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1764{
1766 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1767 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1768 typedef typename BinaryReturn<C1,C2,FnQuarkContract23>::Type_t Container_t;
1770 CreateLeaf<QDPType<T1,C1> >::make(l),
1771 CreateLeaf<QDPType<T2,C2> >::make(r)));
1772}
1773
1775
1792template<class T1,class C1,class T2,class C2>
1794 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1795 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1797quarkContract24(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1798{
1800 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1801 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1802 typedef typename BinaryReturn<C1,C2,FnQuarkContract24>::Type_t Container_t;
1804 CreateLeaf<QDPType<T1,C1> >::make(l),
1805 CreateLeaf<QDPType<T2,C2> >::make(r)));
1806}
1807
1809
1826template<class T1,class C1,class T2,class C2>
1828 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1829 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1831quarkContract12(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1832{
1834 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1835 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1836 typedef typename BinaryReturn<C1,C2,FnQuarkContract12>::Type_t Container_t;
1838 CreateLeaf<QDPType<T1,C1> >::make(l),
1839 CreateLeaf<QDPType<T2,C2> >::make(r)));
1840}
1841
1843
1860template<class T1,class C1,class T2,class C2>
1862 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1863 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1865quarkContract34(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1866{
1868 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1869 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1870 typedef typename BinaryReturn<C1,C2,FnQuarkContract34>::Type_t Container_t;
1872 CreateLeaf<QDPType<T1,C1> >::make(l),
1873 CreateLeaf<QDPType<T2,C2> >::make(r)));
1874}
1875
1877
1881template<class T1,class C1,class T2,class C2>
1882inline typename MakeReturn<BinaryNode<OpAdd,
1883 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1884 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1886operator+(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1887{
1888 typedef BinaryNode<OpAdd,
1889 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1890 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1891 typedef typename BinaryReturn<C1,C2,OpAdd>::Type_t Container_t;
1893 CreateLeaf<QDPType<T1,C1> >::make(l),
1894 CreateLeaf<QDPType<T2,C2> >::make(r)));
1895}
1896
1898
1902template<class T1,class C1,class T2,class C2>
1903inline typename MakeReturn<BinaryNode<OpSubtract,
1904 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1905 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1907operator-(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1908{
1909 typedef BinaryNode<OpSubtract,
1910 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1911 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1912 typedef typename BinaryReturn<C1,C2,OpSubtract>::Type_t Container_t;
1914 CreateLeaf<QDPType<T1,C1> >::make(l),
1915 CreateLeaf<QDPType<T2,C2> >::make(r)));
1916}
1917
1919
1923template<class T1,class C1,class T2,class C2>
1924inline typename MakeReturn<BinaryNode<OpMultiply,
1925 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1926 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1928operator*(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1929{
1930 typedef BinaryNode<OpMultiply,
1931 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1932 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1933 typedef typename BinaryReturn<C1,C2,OpMultiply>::Type_t Container_t;
1935 CreateLeaf<QDPType<T1,C1> >::make(l),
1936 CreateLeaf<QDPType<T2,C2> >::make(r)));
1937}
1938
1940
1944template<class T1,class C1,class T2,class C2>
1945inline typename MakeReturn<BinaryNode<OpDivide,
1946 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1947 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1949operator/(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1950{
1951 typedef BinaryNode<OpDivide,
1952 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1953 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1954 typedef typename BinaryReturn<C1,C2,OpDivide>::Type_t Container_t;
1956 CreateLeaf<QDPType<T1,C1> >::make(l),
1957 CreateLeaf<QDPType<T2,C2> >::make(r)));
1958}
1959
1961
1965template<class T1,class C1,class T2,class C2>
1966inline typename MakeReturn<BinaryNode<OpMod,
1967 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1968 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1970operator%(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1971{
1972 typedef BinaryNode<OpMod,
1973 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1974 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1975 typedef typename BinaryReturn<C1,C2,OpMod>::Type_t Container_t;
1977 CreateLeaf<QDPType<T1,C1> >::make(l),
1978 CreateLeaf<QDPType<T2,C2> >::make(r)));
1979}
1980
1982
1986template<class T1,class C1,class T2,class C2>
1987inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
1988 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1989 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
1991operator&(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
1992{
1993 typedef BinaryNode<OpBitwiseAnd,
1994 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
1995 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
1996 typedef typename BinaryReturn<C1,C2,OpBitwiseAnd>::Type_t Container_t;
1998 CreateLeaf<QDPType<T1,C1> >::make(l),
1999 CreateLeaf<QDPType<T2,C2> >::make(r)));
2000}
2001
2003
2007template<class T1,class C1,class T2,class C2>
2008inline typename MakeReturn<BinaryNode<OpBitwiseOr,
2009 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2010 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2012operator|(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2013{
2014 typedef BinaryNode<OpBitwiseOr,
2015 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2016 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2017 typedef typename BinaryReturn<C1,C2,OpBitwiseOr>::Type_t Container_t;
2019 CreateLeaf<QDPType<T1,C1> >::make(l),
2020 CreateLeaf<QDPType<T2,C2> >::make(r)));
2021}
2022
2024
2028template<class T1,class C1,class T2,class C2>
2029inline typename MakeReturn<BinaryNode<OpBitwiseXor,
2030 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2031 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2033operator^(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2034{
2035 typedef BinaryNode<OpBitwiseXor,
2036 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2037 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2038 typedef typename BinaryReturn<C1,C2,OpBitwiseXor>::Type_t Container_t;
2040 CreateLeaf<QDPType<T1,C1> >::make(l),
2041 CreateLeaf<QDPType<T2,C2> >::make(r)));
2042}
2043
2045
2050template<class T1,class C1,class T2,class C2>
2051inline typename MakeReturn<BinaryNode<FnLdexp,
2052 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2053 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2055ldexp(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2056{
2057 typedef BinaryNode<FnLdexp,
2058 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2059 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2060 typedef typename BinaryReturn<C1,C2,FnLdexp>::Type_t Container_t;
2062 CreateLeaf<QDPType<T1,C1> >::make(l),
2063 CreateLeaf<QDPType<T2,C2> >::make(r)));
2064}
2065
2067
2071template<class T1,class C1,class T2,class C2>
2072inline typename MakeReturn<BinaryNode<FnPow,
2073 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2074 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2076pow(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2077{
2078 typedef BinaryNode<FnPow,
2079 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2080 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2081 typedef typename BinaryReturn<C1,C2,FnPow>::Type_t Container_t;
2083 CreateLeaf<QDPType<T1,C1> >::make(l),
2084 CreateLeaf<QDPType<T2,C2> >::make(r)));
2085}
2086
2088
2093template<class T1,class C1,class T2,class C2>
2094inline typename MakeReturn<BinaryNode<FnFmod,
2095 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2096 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2098fmod(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2099{
2100 typedef BinaryNode<FnFmod,
2101 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2102 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2103 typedef typename BinaryReturn<C1,C2,FnFmod>::Type_t Container_t;
2105 CreateLeaf<QDPType<T1,C1> >::make(l),
2106 CreateLeaf<QDPType<T2,C2> >::make(r)));
2107}
2108
2110
2115template<class T1,class C1,class T2,class C2>
2116inline typename MakeReturn<BinaryNode<FnArcTan2,
2117 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2118 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2120atan2(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2121{
2122 typedef BinaryNode<FnArcTan2,
2123 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2124 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2125 typedef typename BinaryReturn<C1,C2,FnArcTan2>::Type_t Container_t;
2127 CreateLeaf<QDPType<T1,C1> >::make(l),
2128 CreateLeaf<QDPType<T2,C2> >::make(r)));
2129}
2130
2132
2136template<class T1,class C1,class T2,class C2>
2137inline typename MakeReturn<BinaryNode<OpLT,
2138 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2139 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2141operator<(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2142{
2143 typedef BinaryNode<OpLT,
2144 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2145 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2146 typedef typename BinaryReturn<C1,C2,OpLT>::Type_t Container_t;
2148 CreateLeaf<QDPType<T1,C1> >::make(l),
2149 CreateLeaf<QDPType<T2,C2> >::make(r)));
2150}
2151
2153
2157template<class T1,class C1,class T2,class C2>
2158inline typename MakeReturn<BinaryNode<OpLE,
2159 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2160 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2162operator<=(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2163{
2164 typedef BinaryNode<OpLE,
2165 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2166 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2167 typedef typename BinaryReturn<C1,C2,OpLE>::Type_t Container_t;
2169 CreateLeaf<QDPType<T1,C1> >::make(l),
2170 CreateLeaf<QDPType<T2,C2> >::make(r)));
2171}
2172
2174
2178template<class T1,class C1,class T2,class C2>
2179inline typename MakeReturn<BinaryNode<OpGT,
2180 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2181 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2183operator>(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2184{
2185 typedef BinaryNode<OpGT,
2186 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2187 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2188 typedef typename BinaryReturn<C1,C2,OpGT>::Type_t Container_t;
2190 CreateLeaf<QDPType<T1,C1> >::make(l),
2191 CreateLeaf<QDPType<T2,C2> >::make(r)));
2192}
2193
2195
2199template<class T1,class C1,class T2,class C2>
2200inline typename MakeReturn<BinaryNode<OpGE,
2201 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2202 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2204operator>=(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2205{
2206 typedef BinaryNode<OpGE,
2207 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2208 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2209 typedef typename BinaryReturn<C1,C2,OpGE>::Type_t Container_t;
2211 CreateLeaf<QDPType<T1,C1> >::make(l),
2212 CreateLeaf<QDPType<T2,C2> >::make(r)));
2213}
2214
2216
2220template<class T1,class C1,class T2,class C2>
2221inline typename MakeReturn<BinaryNode<OpEQ,
2222 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2223 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2225operator==(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2226{
2227 typedef BinaryNode<OpEQ,
2228 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2229 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2230 typedef typename BinaryReturn<C1,C2,OpEQ>::Type_t Container_t;
2232 CreateLeaf<QDPType<T1,C1> >::make(l),
2233 CreateLeaf<QDPType<T2,C2> >::make(r)));
2234}
2235
2237
2241template<class T1,class C1,class T2,class C2>
2242inline typename MakeReturn<BinaryNode<OpNE,
2243 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2244 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2246operator!=(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2247{
2248 typedef BinaryNode<OpNE,
2249 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2250 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2251 typedef typename BinaryReturn<C1,C2,OpNE>::Type_t Container_t;
2253 CreateLeaf<QDPType<T1,C1> >::make(l),
2254 CreateLeaf<QDPType<T2,C2> >::make(r)));
2255}
2256
2258
2262template<class T1,class C1,class T2,class C2>
2263inline typename MakeReturn<BinaryNode<OpAnd,
2264 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2265 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2267operator&&(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2268{
2269 typedef BinaryNode<OpAnd,
2270 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2271 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2272 typedef typename BinaryReturn<C1,C2,OpAnd>::Type_t Container_t;
2274 CreateLeaf<QDPType<T1,C1> >::make(l),
2275 CreateLeaf<QDPType<T2,C2> >::make(r)));
2276}
2277
2279
2283
2284template<class T1,class C1,class T2,class C2>
2285inline typename MakeReturn<BinaryNode<OpOr,
2286 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2287 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2289operator||(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2290{
2291 typedef BinaryNode<OpOr,
2292 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2293 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2294 typedef typename BinaryReturn<C1,C2,OpOr>::Type_t Container_t;
2296 CreateLeaf<QDPType<T1,C1> >::make(l),
2297 CreateLeaf<QDPType<T2,C2> >::make(r)));
2298}
2299
2301
2305template<class T1,class C1,class T2,class C2>
2306inline typename MakeReturn<BinaryNode<OpLeftShift,
2307 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2308 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2310operator<<(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2311{
2312 typedef BinaryNode<OpLeftShift,
2313 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2314 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2315 typedef typename BinaryReturn<C1,C2,OpLeftShift>::Type_t Container_t;
2317 CreateLeaf<QDPType<T1,C1> >::make(l),
2318 CreateLeaf<QDPType<T2,C2> >::make(r)));
2319}
2320
2322
2326template<class T1,class C1,class T2,class C2>
2327inline typename MakeReturn<BinaryNode<OpRightShift,
2328 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2329 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2331operator>>(const QDPType<T1,C1> & l,const QDPType<T2,C2> & r)
2332{
2333 typedef BinaryNode<OpRightShift,
2334 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2335 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2336 typedef typename BinaryReturn<C1,C2,OpRightShift>::Type_t Container_t;
2338 CreateLeaf<QDPType<T1,C1> >::make(l),
2339 CreateLeaf<QDPType<T2,C2> >::make(r)));
2340}
2341
2342template<class T1,class C1,class T2,class C2>
2343inline typename MakeReturn<BinaryNode<FnCmplx,
2344 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2345 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2347cmplx(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2348{
2349 typedef BinaryNode<FnCmplx,
2350 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2351 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2352 typedef typename BinaryReturn<C1,C2,FnCmplx>::Type_t Container_t;
2354 CreateLeaf<QDPType<T1,C1> >::make(l),
2355 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2356}
2357
2358template<class T1,class C1,class T2,class C2>
2359inline typename MakeReturn<BinaryNode<FnOuterProduct,
2360 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2361 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2363outerProduct(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2364{
2365 typedef BinaryNode<FnOuterProduct,
2366 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2367 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2368 typedef typename BinaryReturn<C1,C2,FnOuterProduct>::Type_t Container_t;
2370 CreateLeaf<QDPType<T1,C1> >::make(l),
2371 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2372}
2373
2374template<class T1,class C1,class T2,class C2>
2376 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2377 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2379colorVectorContract(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2380{
2382 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2383 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2384 typedef typename BinaryReturn<C1,C2,FnColorVectorContract>::Type_t Container_t;
2386 CreateLeaf<QDPType<T1,C1> >::make(l),
2387 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2388}
2389
2390template<class T1,class C1,class T2,class C2>
2392 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2393 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2395colorCrossProduct(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2396{
2398 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2399 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2400 typedef typename BinaryReturn<C1,C2,FnColorCrossProduct>::Type_t Container_t;
2402 CreateLeaf<QDPType<T1,C1> >::make(l),
2403 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2404}
2405
2406template<class T1,class C1,class T2,class C2>
2408 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2409 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2411localInnerProduct(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2412{
2414 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2415 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2416 typedef typename BinaryReturn<C1,C2,FnLocalInnerProduct>::Type_t Container_t;
2418 CreateLeaf<QDPType<T1,C1> >::make(l),
2419 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2420}
2421
2422template<class T1,class C1,class T2,class C2>
2424 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2425 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2427localInnerProductReal(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2428{
2430 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2431 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2432 typedef typename BinaryReturn<C1,C2,FnLocalInnerProductReal>::Type_t Container_t;
2434 CreateLeaf<QDPType<T1,C1> >::make(l),
2435 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2436}
2437
2438template<class T1,class C1,class T2,class C2>
2440 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2441 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2443localColorInnerProduct(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2444{
2446 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2447 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2448 typedef typename BinaryReturn<C1,C2,FnLocalColorInnerProduct>::Type_t Container_t;
2450 CreateLeaf<QDPType<T1,C1> >::make(l),
2451 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2452}
2453
2454template<class T1,class C1,class T2,class C2>
2456 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2457 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2459quarkContract13(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2460{
2462 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2463 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2464 typedef typename BinaryReturn<C1,C2,FnQuarkContract13>::Type_t Container_t;
2466 CreateLeaf<QDPType<T1,C1> >::make(l),
2467 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2468}
2469
2470template<class T1,class C1,class T2,class C2>
2472 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2473 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2475quarkContract14(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2476{
2478 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2479 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2480 typedef typename BinaryReturn<C1,C2,FnQuarkContract14>::Type_t Container_t;
2482 CreateLeaf<QDPType<T1,C1> >::make(l),
2483 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2484}
2485
2486template<class T1,class C1,class T2,class C2>
2488 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2489 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2491quarkContract23(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2492{
2494 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2495 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2496 typedef typename BinaryReturn<C1,C2,FnQuarkContract23>::Type_t Container_t;
2498 CreateLeaf<QDPType<T1,C1> >::make(l),
2499 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2500}
2501
2502template<class T1,class C1,class T2,class C2>
2504 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2505 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2507quarkContract24(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2508{
2510 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2511 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2512 typedef typename BinaryReturn<C1,C2,FnQuarkContract24>::Type_t Container_t;
2514 CreateLeaf<QDPType<T1,C1> >::make(l),
2515 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2516}
2517
2518template<class T1,class C1,class T2,class C2>
2520 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2521 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2523quarkContract12(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2524{
2526 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2527 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2528 typedef typename BinaryReturn<C1,C2,FnQuarkContract12>::Type_t Container_t;
2530 CreateLeaf<QDPType<T1,C1> >::make(l),
2531 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2532}
2533
2534template<class T1,class C1,class T2,class C2>
2536 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2537 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2539quarkContract34(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2540{
2542 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2543 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2544 typedef typename BinaryReturn<C1,C2,FnQuarkContract34>::Type_t Container_t;
2546 CreateLeaf<QDPType<T1,C1> >::make(l),
2547 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2548}
2549
2550template<class T1,class C1,class T2,class C2>
2551inline typename MakeReturn<BinaryNode<OpAdd,
2552 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2553 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2555operator+(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2556{
2557 typedef BinaryNode<OpAdd,
2558 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2559 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2560 typedef typename BinaryReturn<C1,C2,OpAdd>::Type_t Container_t;
2562 CreateLeaf<QDPType<T1,C1> >::make(l),
2563 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2564}
2565
2566template<class T1,class C1,class T2,class C2>
2567inline typename MakeReturn<BinaryNode<OpSubtract,
2568 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2569 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2571operator-(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2572{
2573 typedef BinaryNode<OpSubtract,
2574 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2575 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2576 typedef typename BinaryReturn<C1,C2,OpSubtract>::Type_t Container_t;
2578 CreateLeaf<QDPType<T1,C1> >::make(l),
2579 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2580}
2581
2582template<class T1,class C1,class T2,class C2>
2583inline typename MakeReturn<BinaryNode<OpMultiply,
2584 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2585 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2587operator*(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2588{
2589 typedef BinaryNode<OpMultiply,
2590 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2591 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2592 typedef typename BinaryReturn<C1,C2,OpMultiply>::Type_t Container_t;
2594 CreateLeaf<QDPType<T1,C1> >::make(l),
2595 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2596}
2597
2598template<class T1,class C1,class T2,class C2>
2599inline typename MakeReturn<BinaryNode<OpDivide,
2600 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2601 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2603operator/(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2604{
2605 typedef BinaryNode<OpDivide,
2606 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2607 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2608 typedef typename BinaryReturn<C1,C2,OpDivide>::Type_t Container_t;
2610 CreateLeaf<QDPType<T1,C1> >::make(l),
2611 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2612}
2613
2614template<class T1,class C1,class T2,class C2>
2615inline typename MakeReturn<BinaryNode<OpMod,
2616 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2617 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2619operator%(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2620{
2621 typedef BinaryNode<OpMod,
2622 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2623 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2624 typedef typename BinaryReturn<C1,C2,OpMod>::Type_t Container_t;
2626 CreateLeaf<QDPType<T1,C1> >::make(l),
2627 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2628}
2629
2630template<class T1,class C1,class T2,class C2>
2631inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
2632 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2633 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2635operator&(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2636{
2637 typedef BinaryNode<OpBitwiseAnd,
2638 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2639 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2640 typedef typename BinaryReturn<C1,C2,OpBitwiseAnd>::Type_t Container_t;
2642 CreateLeaf<QDPType<T1,C1> >::make(l),
2643 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2644}
2645
2646template<class T1,class C1,class T2,class C2>
2647inline typename MakeReturn<BinaryNode<OpBitwiseOr,
2648 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2649 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2651operator|(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2652{
2653 typedef BinaryNode<OpBitwiseOr,
2654 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2655 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2656 typedef typename BinaryReturn<C1,C2,OpBitwiseOr>::Type_t Container_t;
2658 CreateLeaf<QDPType<T1,C1> >::make(l),
2659 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2660}
2661
2662template<class T1,class C1,class T2,class C2>
2663inline typename MakeReturn<BinaryNode<OpBitwiseXor,
2664 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2665 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2667operator^(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2668{
2669 typedef BinaryNode<OpBitwiseXor,
2670 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2671 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2672 typedef typename BinaryReturn<C1,C2,OpBitwiseXor>::Type_t Container_t;
2674 CreateLeaf<QDPType<T1,C1> >::make(l),
2675 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2676}
2677
2678template<class T1,class C1,class T2,class C2>
2679inline typename MakeReturn<BinaryNode<FnLdexp,
2680 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2681 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2683ldexp(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2684{
2685 typedef BinaryNode<FnLdexp,
2686 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2687 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2688 typedef typename BinaryReturn<C1,C2,FnLdexp>::Type_t Container_t;
2690 CreateLeaf<QDPType<T1,C1> >::make(l),
2691 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2692}
2693
2694template<class T1,class C1,class T2,class C2>
2695inline typename MakeReturn<BinaryNode<FnPow,
2696 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2697 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2699pow(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2700{
2701 typedef BinaryNode<FnPow,
2702 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2703 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2704 typedef typename BinaryReturn<C1,C2,FnPow>::Type_t Container_t;
2706 CreateLeaf<QDPType<T1,C1> >::make(l),
2707 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2708}
2709
2710template<class T1,class C1,class T2,class C2>
2711inline typename MakeReturn<BinaryNode<FnFmod,
2712 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2713 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2715fmod(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2716{
2717 typedef BinaryNode<FnFmod,
2718 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2719 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2720 typedef typename BinaryReturn<C1,C2,FnFmod>::Type_t Container_t;
2722 CreateLeaf<QDPType<T1,C1> >::make(l),
2723 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2724}
2725
2726template<class T1,class C1,class T2,class C2>
2727inline typename MakeReturn<BinaryNode<FnArcTan2,
2728 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2729 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2731atan2(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2732{
2733 typedef BinaryNode<FnArcTan2,
2734 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2735 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2736 typedef typename BinaryReturn<C1,C2,FnArcTan2>::Type_t Container_t;
2738 CreateLeaf<QDPType<T1,C1> >::make(l),
2739 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2740}
2741
2742template<class T1,class C1,class T2,class C2>
2743inline typename MakeReturn<BinaryNode<OpLT,
2744 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2745 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2747operator<(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2748{
2749 typedef BinaryNode<OpLT,
2750 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2751 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2752 typedef typename BinaryReturn<C1,C2,OpLT>::Type_t Container_t;
2754 CreateLeaf<QDPType<T1,C1> >::make(l),
2755 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2756}
2757
2758template<class T1,class C1,class T2,class C2>
2759inline typename MakeReturn<BinaryNode<OpLE,
2760 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2761 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2763operator<=(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2764{
2765 typedef BinaryNode<OpLE,
2766 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2767 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2768 typedef typename BinaryReturn<C1,C2,OpLE>::Type_t Container_t;
2770 CreateLeaf<QDPType<T1,C1> >::make(l),
2771 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2772}
2773
2774template<class T1,class C1,class T2,class C2>
2775inline typename MakeReturn<BinaryNode<OpGT,
2776 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2777 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2779operator>(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2780{
2781 typedef BinaryNode<OpGT,
2782 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2783 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2784 typedef typename BinaryReturn<C1,C2,OpGT>::Type_t Container_t;
2786 CreateLeaf<QDPType<T1,C1> >::make(l),
2787 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2788}
2789
2790template<class T1,class C1,class T2,class C2>
2791inline typename MakeReturn<BinaryNode<OpGE,
2792 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2793 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2795operator>=(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2796{
2797 typedef BinaryNode<OpGE,
2798 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2799 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2800 typedef typename BinaryReturn<C1,C2,OpGE>::Type_t Container_t;
2802 CreateLeaf<QDPType<T1,C1> >::make(l),
2803 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2804}
2805
2806template<class T1,class C1,class T2,class C2>
2807inline typename MakeReturn<BinaryNode<OpEQ,
2808 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2809 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2811operator==(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2812{
2813 typedef BinaryNode<OpEQ,
2814 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2815 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2816 typedef typename BinaryReturn<C1,C2,OpEQ>::Type_t Container_t;
2818 CreateLeaf<QDPType<T1,C1> >::make(l),
2819 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2820}
2821
2822template<class T1,class C1,class T2,class C2>
2823inline typename MakeReturn<BinaryNode<OpNE,
2824 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2825 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2827operator!=(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2828{
2829 typedef BinaryNode<OpNE,
2830 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2831 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2832 typedef typename BinaryReturn<C1,C2,OpNE>::Type_t Container_t;
2834 CreateLeaf<QDPType<T1,C1> >::make(l),
2835 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2836}
2837
2838template<class T1,class C1,class T2,class C2>
2839inline typename MakeReturn<BinaryNode<OpAnd,
2840 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2841 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2843operator&&(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2844{
2845 typedef BinaryNode<OpAnd,
2846 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2847 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2848 typedef typename BinaryReturn<C1,C2,OpAnd>::Type_t Container_t;
2850 CreateLeaf<QDPType<T1,C1> >::make(l),
2851 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2852}
2853
2854template<class T1,class C1,class T2,class C2>
2855inline typename MakeReturn<BinaryNode<OpOr,
2856 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2857 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2859operator||(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2860{
2861 typedef BinaryNode<OpOr,
2862 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2863 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2864 typedef typename BinaryReturn<C1,C2,OpOr>::Type_t Container_t;
2866 CreateLeaf<QDPType<T1,C1> >::make(l),
2867 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2868}
2869
2870template<class T1,class C1,class T2,class C2>
2871inline typename MakeReturn<BinaryNode<OpLeftShift,
2872 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2873 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2875operator<<(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2876{
2877 typedef BinaryNode<OpLeftShift,
2878 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2879 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2880 typedef typename BinaryReturn<C1,C2,OpLeftShift>::Type_t Container_t;
2882 CreateLeaf<QDPType<T1,C1> >::make(l),
2883 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2884}
2885
2886template<class T1,class C1,class T2,class C2>
2887inline typename MakeReturn<BinaryNode<OpRightShift,
2888 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2889 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
2891operator>>(const QDPType<T1,C1> & l,const QDPExpr<T2,C2> & r)
2892{
2893 typedef BinaryNode<OpRightShift,
2894 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
2895 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
2896 typedef typename BinaryReturn<C1,C2,OpRightShift>::Type_t Container_t;
2898 CreateLeaf<QDPType<T1,C1> >::make(l),
2899 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
2900}
2901
2902template<class T1,class C1,class T2,class C2>
2903inline typename MakeReturn<BinaryNode<FnCmplx,
2904 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
2905 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2907cmplx(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
2908{
2909 typedef BinaryNode<FnCmplx,
2910 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
2911 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2912 typedef typename BinaryReturn<C1,C2,FnCmplx>::Type_t Container_t;
2914 CreateLeaf<QDPExpr<T1,C1> >::make(l),
2915 CreateLeaf<QDPType<T2,C2> >::make(r)));
2916}
2917
2918template<class T1,class C1,class T2,class C2>
2919inline typename MakeReturn<BinaryNode<FnOuterProduct,
2920 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
2921 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2923outerProduct(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
2924{
2925 typedef BinaryNode<FnOuterProduct,
2926 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
2927 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2928 typedef typename BinaryReturn<C1,C2,FnOuterProduct>::Type_t Container_t;
2930 CreateLeaf<QDPExpr<T1,C1> >::make(l),
2931 CreateLeaf<QDPType<T2,C2> >::make(r)));
2932}
2933
2934template<class T1,class C1,class T2,class C2>
2936 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
2937 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2939colorVectorContract(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
2940{
2942 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
2943 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2944 typedef typename BinaryReturn<C1,C2,FnColorVectorContract>::Type_t Container_t;
2946 CreateLeaf<QDPExpr<T1,C1> >::make(l),
2947 CreateLeaf<QDPType<T2,C2> >::make(r)));
2948}
2949
2950template<class T1,class C1,class T2,class C2>
2952 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
2953 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2955colorCrossProduct(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
2956{
2958 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
2959 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2960 typedef typename BinaryReturn<C1,C2,FnColorCrossProduct>::Type_t Container_t;
2962 CreateLeaf<QDPExpr<T1,C1> >::make(l),
2963 CreateLeaf<QDPType<T2,C2> >::make(r)));
2964}
2965
2966template<class T1,class C1,class T2,class C2>
2968 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
2969 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2971localInnerProduct(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
2972{
2974 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
2975 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2976 typedef typename BinaryReturn<C1,C2,FnLocalInnerProduct>::Type_t Container_t;
2978 CreateLeaf<QDPExpr<T1,C1> >::make(l),
2979 CreateLeaf<QDPType<T2,C2> >::make(r)));
2980}
2981
2982template<class T1,class C1,class T2,class C2>
2984 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
2985 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
2987localInnerProductReal(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
2988{
2990 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
2991 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
2992 typedef typename BinaryReturn<C1,C2,FnLocalInnerProductReal>::Type_t Container_t;
2994 CreateLeaf<QDPExpr<T1,C1> >::make(l),
2995 CreateLeaf<QDPType<T2,C2> >::make(r)));
2996}
2997
2998template<class T1,class C1,class T2,class C2>
3000 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3001 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3003localColorInnerProduct(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3004{
3006 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3007 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3008 typedef typename BinaryReturn<C1,C2,FnLocalColorInnerProduct>::Type_t Container_t;
3010 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3011 CreateLeaf<QDPType<T2,C2> >::make(r)));
3012}
3013
3014template<class T1,class C1,class T2,class C2>
3016 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3017 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3019quarkContract13(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3020{
3022 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3023 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3024 typedef typename BinaryReturn<C1,C2,FnQuarkContract13>::Type_t Container_t;
3026 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3027 CreateLeaf<QDPType<T2,C2> >::make(r)));
3028}
3029
3030template<class T1,class C1,class T2,class C2>
3032 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3033 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3035quarkContract14(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3036{
3038 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3039 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3040 typedef typename BinaryReturn<C1,C2,FnQuarkContract14>::Type_t Container_t;
3042 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3043 CreateLeaf<QDPType<T2,C2> >::make(r)));
3044}
3045
3046template<class T1,class C1,class T2,class C2>
3048 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3049 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3051quarkContract23(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3052{
3054 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3055 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3056 typedef typename BinaryReturn<C1,C2,FnQuarkContract23>::Type_t Container_t;
3058 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3059 CreateLeaf<QDPType<T2,C2> >::make(r)));
3060}
3061
3062template<class T1,class C1,class T2,class C2>
3064 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3065 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3067quarkContract24(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3068{
3070 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3071 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3072 typedef typename BinaryReturn<C1,C2,FnQuarkContract24>::Type_t Container_t;
3074 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3075 CreateLeaf<QDPType<T2,C2> >::make(r)));
3076}
3077
3078template<class T1,class C1,class T2,class C2>
3080 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3081 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3083quarkContract12(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3084{
3086 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3087 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3088 typedef typename BinaryReturn<C1,C2,FnQuarkContract12>::Type_t Container_t;
3090 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3091 CreateLeaf<QDPType<T2,C2> >::make(r)));
3092}
3093
3094template<class T1,class C1,class T2,class C2>
3096 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3097 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3099quarkContract34(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3100{
3102 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3103 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3104 typedef typename BinaryReturn<C1,C2,FnQuarkContract34>::Type_t Container_t;
3106 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3107 CreateLeaf<QDPType<T2,C2> >::make(r)));
3108}
3109
3110template<class T1,class C1,class T2,class C2>
3111inline typename MakeReturn<BinaryNode<OpAdd,
3112 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3113 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3115operator+(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3116{
3117 typedef BinaryNode<OpAdd,
3118 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3119 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3120 typedef typename BinaryReturn<C1,C2,OpAdd>::Type_t Container_t;
3122 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3123 CreateLeaf<QDPType<T2,C2> >::make(r)));
3124}
3125
3126template<class T1,class C1,class T2,class C2>
3127inline typename MakeReturn<BinaryNode<OpSubtract,
3128 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3129 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3131operator-(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3132{
3133 typedef BinaryNode<OpSubtract,
3134 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3135 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3136 typedef typename BinaryReturn<C1,C2,OpSubtract>::Type_t Container_t;
3138 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3139 CreateLeaf<QDPType<T2,C2> >::make(r)));
3140}
3141
3142template<class T1,class C1,class T2,class C2>
3143inline typename MakeReturn<BinaryNode<OpMultiply,
3144 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3145 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3147operator*(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3148{
3149 typedef BinaryNode<OpMultiply,
3150 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3151 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3152 typedef typename BinaryReturn<C1,C2,OpMultiply>::Type_t Container_t;
3154 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3155 CreateLeaf<QDPType<T2,C2> >::make(r)));
3156}
3157
3158template<class T1,class C1,class T2,class C2>
3159inline typename MakeReturn<BinaryNode<OpDivide,
3160 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3161 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3163operator/(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3164{
3165 typedef BinaryNode<OpDivide,
3166 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3167 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3168 typedef typename BinaryReturn<C1,C2,OpDivide>::Type_t Container_t;
3170 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3171 CreateLeaf<QDPType<T2,C2> >::make(r)));
3172}
3173
3174template<class T1,class C1,class T2,class C2>
3175inline typename MakeReturn<BinaryNode<OpMod,
3176 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3177 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3179operator%(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3180{
3181 typedef BinaryNode<OpMod,
3182 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3183 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3184 typedef typename BinaryReturn<C1,C2,OpMod>::Type_t Container_t;
3186 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3187 CreateLeaf<QDPType<T2,C2> >::make(r)));
3188}
3189
3190template<class T1,class C1,class T2,class C2>
3191inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
3192 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3193 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3195operator&(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3196{
3197 typedef BinaryNode<OpBitwiseAnd,
3198 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3199 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3200 typedef typename BinaryReturn<C1,C2,OpBitwiseAnd>::Type_t Container_t;
3202 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3203 CreateLeaf<QDPType<T2,C2> >::make(r)));
3204}
3205
3206template<class T1,class C1,class T2,class C2>
3207inline typename MakeReturn<BinaryNode<OpBitwiseOr,
3208 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3209 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3211operator|(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3212{
3213 typedef BinaryNode<OpBitwiseOr,
3214 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3215 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3216 typedef typename BinaryReturn<C1,C2,OpBitwiseOr>::Type_t Container_t;
3218 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3219 CreateLeaf<QDPType<T2,C2> >::make(r)));
3220}
3221
3222template<class T1,class C1,class T2,class C2>
3223inline typename MakeReturn<BinaryNode<OpBitwiseXor,
3224 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3225 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3227operator^(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3228{
3229 typedef BinaryNode<OpBitwiseXor,
3230 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3231 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3232 typedef typename BinaryReturn<C1,C2,OpBitwiseXor>::Type_t Container_t;
3234 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3235 CreateLeaf<QDPType<T2,C2> >::make(r)));
3236}
3237
3238template<class T1,class C1,class T2,class C2>
3239inline typename MakeReturn<BinaryNode<FnLdexp,
3240 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3241 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3243ldexp(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3244{
3245 typedef BinaryNode<FnLdexp,
3246 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3247 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3248 typedef typename BinaryReturn<C1,C2,FnLdexp>::Type_t Container_t;
3250 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3251 CreateLeaf<QDPType<T2,C2> >::make(r)));
3252}
3253
3254template<class T1,class C1,class T2,class C2>
3255inline typename MakeReturn<BinaryNode<FnPow,
3256 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3257 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3259pow(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3260{
3261 typedef BinaryNode<FnPow,
3262 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3263 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3264 typedef typename BinaryReturn<C1,C2,FnPow>::Type_t Container_t;
3266 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3267 CreateLeaf<QDPType<T2,C2> >::make(r)));
3268}
3269
3270template<class T1,class C1,class T2,class C2>
3271inline typename MakeReturn<BinaryNode<FnFmod,
3272 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3273 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3275fmod(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3276{
3277 typedef BinaryNode<FnFmod,
3278 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3279 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3280 typedef typename BinaryReturn<C1,C2,FnFmod>::Type_t Container_t;
3282 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3283 CreateLeaf<QDPType<T2,C2> >::make(r)));
3284}
3285
3286template<class T1,class C1,class T2,class C2>
3287inline typename MakeReturn<BinaryNode<FnArcTan2,
3288 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3289 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3291atan2(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3292{
3293 typedef BinaryNode<FnArcTan2,
3294 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3295 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3296 typedef typename BinaryReturn<C1,C2,FnArcTan2>::Type_t Container_t;
3298 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3299 CreateLeaf<QDPType<T2,C2> >::make(r)));
3300}
3301
3302template<class T1,class C1,class T2,class C2>
3303inline typename MakeReturn<BinaryNode<OpLT,
3304 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3305 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3307operator<(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3308{
3309 typedef BinaryNode<OpLT,
3310 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3311 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3312 typedef typename BinaryReturn<C1,C2,OpLT>::Type_t Container_t;
3314 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3315 CreateLeaf<QDPType<T2,C2> >::make(r)));
3316}
3317
3318template<class T1,class C1,class T2,class C2>
3319inline typename MakeReturn<BinaryNode<OpLE,
3320 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3321 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3323operator<=(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3324{
3325 typedef BinaryNode<OpLE,
3326 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3327 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3328 typedef typename BinaryReturn<C1,C2,OpLE>::Type_t Container_t;
3330 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3331 CreateLeaf<QDPType<T2,C2> >::make(r)));
3332}
3333
3334template<class T1,class C1,class T2,class C2>
3335inline typename MakeReturn<BinaryNode<OpGT,
3336 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3337 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3339operator>(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3340{
3341 typedef BinaryNode<OpGT,
3342 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3343 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3344 typedef typename BinaryReturn<C1,C2,OpGT>::Type_t Container_t;
3346 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3347 CreateLeaf<QDPType<T2,C2> >::make(r)));
3348}
3349
3350template<class T1,class C1,class T2,class C2>
3351inline typename MakeReturn<BinaryNode<OpGE,
3352 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3353 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3355operator>=(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3356{
3357 typedef BinaryNode<OpGE,
3358 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3359 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3360 typedef typename BinaryReturn<C1,C2,OpGE>::Type_t Container_t;
3362 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3363 CreateLeaf<QDPType<T2,C2> >::make(r)));
3364}
3365
3366template<class T1,class C1,class T2,class C2>
3367inline typename MakeReturn<BinaryNode<OpEQ,
3368 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3369 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3371operator==(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3372{
3373 typedef BinaryNode<OpEQ,
3374 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3375 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3376 typedef typename BinaryReturn<C1,C2,OpEQ>::Type_t Container_t;
3378 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3379 CreateLeaf<QDPType<T2,C2> >::make(r)));
3380}
3381
3382template<class T1,class C1,class T2,class C2>
3383inline typename MakeReturn<BinaryNode<OpNE,
3384 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3385 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3387operator!=(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3388{
3389 typedef BinaryNode<OpNE,
3390 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3391 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3392 typedef typename BinaryReturn<C1,C2,OpNE>::Type_t Container_t;
3394 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3395 CreateLeaf<QDPType<T2,C2> >::make(r)));
3396}
3397
3398template<class T1,class C1,class T2,class C2>
3399inline typename MakeReturn<BinaryNode<OpAnd,
3400 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3401 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3403operator&&(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3404{
3405 typedef BinaryNode<OpAnd,
3406 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3407 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3408 typedef typename BinaryReturn<C1,C2,OpAnd>::Type_t Container_t;
3410 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3411 CreateLeaf<QDPType<T2,C2> >::make(r)));
3412}
3413
3414template<class T1,class C1,class T2,class C2>
3415inline typename MakeReturn<BinaryNode<OpOr,
3416 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3417 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3419operator||(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3420{
3421 typedef BinaryNode<OpOr,
3422 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3423 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3424 typedef typename BinaryReturn<C1,C2,OpOr>::Type_t Container_t;
3426 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3427 CreateLeaf<QDPType<T2,C2> >::make(r)));
3428}
3429
3430template<class T1,class C1,class T2,class C2>
3431inline typename MakeReturn<BinaryNode<OpLeftShift,
3432 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3433 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3435operator<<(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3436{
3437 typedef BinaryNode<OpLeftShift,
3438 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3439 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3440 typedef typename BinaryReturn<C1,C2,OpLeftShift>::Type_t Container_t;
3442 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3443 CreateLeaf<QDPType<T2,C2> >::make(r)));
3444}
3445
3446template<class T1,class C1,class T2,class C2>
3447inline typename MakeReturn<BinaryNode<OpRightShift,
3448 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3449 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
3451operator>>(const QDPExpr<T1,C1> & l,const QDPType<T2,C2> & r)
3452{
3453 typedef BinaryNode<OpRightShift,
3454 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
3455 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
3456 typedef typename BinaryReturn<C1,C2,OpRightShift>::Type_t Container_t;
3458 CreateLeaf<QDPExpr<T1,C1> >::make(l),
3459 CreateLeaf<QDPType<T2,C2> >::make(r)));
3460}
3461
3462template<class T1,class C1>
3463inline typename MakeReturn<BinaryNode<FnCmplx,
3464 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3467cmplx(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3468{
3469 typedef BinaryNode<FnCmplx,
3470 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3474 CreateLeaf<QDPType<T1,C1> >::make(l),
3475 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3476}
3477
3478template<class T1,class C1>
3479inline typename MakeReturn<BinaryNode<FnOuterProduct,
3480 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3483outerProduct(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3484{
3485 typedef BinaryNode<FnOuterProduct,
3486 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3490 CreateLeaf<QDPType<T1,C1> >::make(l),
3491 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3492}
3493
3494template<class T1,class C1>
3496 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3499colorVectorContract(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3500{
3502 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3506 CreateLeaf<QDPType<T1,C1> >::make(l),
3507 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3508}
3509
3510template<class T1,class C1>
3512 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3515colorCrossProduct(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3516{
3518 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3522 CreateLeaf<QDPType<T1,C1> >::make(l),
3523 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3524}
3525
3526template<class T1,class C1>
3528 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3531localInnerProduct(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3532{
3534 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3538 CreateLeaf<QDPType<T1,C1> >::make(l),
3539 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3540}
3541
3542template<class T1,class C1>
3544 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3547localInnerProductReal(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3548{
3550 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3554 CreateLeaf<QDPType<T1,C1> >::make(l),
3555 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3556}
3557
3558template<class T1,class C1>
3560 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3563localColorInnerProduct(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3564{
3566 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3570 CreateLeaf<QDPType<T1,C1> >::make(l),
3571 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3572}
3573
3574template<class T1,class C1>
3576 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3579quarkContract13(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3580{
3582 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3586 CreateLeaf<QDPType<T1,C1> >::make(l),
3587 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3588}
3589
3590template<class T1,class C1>
3592 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3595quarkContract14(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3596{
3598 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3602 CreateLeaf<QDPType<T1,C1> >::make(l),
3603 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3604}
3605
3606template<class T1,class C1>
3608 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3611quarkContract23(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3612{
3614 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3618 CreateLeaf<QDPType<T1,C1> >::make(l),
3619 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3620}
3621
3622template<class T1,class C1>
3624 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3627quarkContract24(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3628{
3630 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3634 CreateLeaf<QDPType<T1,C1> >::make(l),
3635 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3636}
3637
3638template<class T1,class C1>
3640 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3643quarkContract12(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3644{
3646 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3650 CreateLeaf<QDPType<T1,C1> >::make(l),
3651 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3652}
3653
3654template<class T1,class C1>
3656 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3659quarkContract34(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3660{
3662 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3666 CreateLeaf<QDPType<T1,C1> >::make(l),
3667 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3668}
3669
3670template<class T1,class C1>
3671inline typename MakeReturn<BinaryNode<OpAdd,
3672 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3675operator+(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3676{
3677 typedef BinaryNode<OpAdd,
3678 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3682 CreateLeaf<QDPType<T1,C1> >::make(l),
3683 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3684}
3685
3686template<class T1,class C1>
3687inline typename MakeReturn<BinaryNode<OpSubtract,
3688 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3691operator-(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3692{
3693 typedef BinaryNode<OpSubtract,
3694 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3698 CreateLeaf<QDPType<T1,C1> >::make(l),
3699 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3700}
3701
3702template<class T1,class C1>
3703inline typename MakeReturn<BinaryNode<OpMultiply,
3704 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3707operator*(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3708{
3709 typedef BinaryNode<OpMultiply,
3710 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3714 CreateLeaf<QDPType<T1,C1> >::make(l),
3715 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3716}
3717
3718template<class T1,class C1>
3719inline typename MakeReturn<BinaryNode<OpDivide,
3720 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3723operator/(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3724{
3725 typedef BinaryNode<OpDivide,
3726 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3730 CreateLeaf<QDPType<T1,C1> >::make(l),
3731 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3732}
3733
3734template<class T1,class C1>
3735inline typename MakeReturn<BinaryNode<OpMod,
3736 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3739operator%(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3740{
3741 typedef BinaryNode<OpMod,
3742 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3746 CreateLeaf<QDPType<T1,C1> >::make(l),
3747 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3748}
3749
3750template<class T1,class C1>
3751inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
3752 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3755operator&(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3756{
3757 typedef BinaryNode<OpBitwiseAnd,
3758 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3762 CreateLeaf<QDPType<T1,C1> >::make(l),
3763 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3764}
3765
3766template<class T1,class C1>
3767inline typename MakeReturn<BinaryNode<OpBitwiseOr,
3768 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3771operator|(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3772{
3773 typedef BinaryNode<OpBitwiseOr,
3774 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3778 CreateLeaf<QDPType<T1,C1> >::make(l),
3779 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3780}
3781
3782template<class T1,class C1>
3783inline typename MakeReturn<BinaryNode<OpBitwiseXor,
3784 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3787operator^(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3788{
3789 typedef BinaryNode<OpBitwiseXor,
3790 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3794 CreateLeaf<QDPType<T1,C1> >::make(l),
3795 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3796}
3797
3798template<class T1,class C1>
3799inline typename MakeReturn<BinaryNode<FnLdexp,
3800 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3803ldexp(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3804{
3805 typedef BinaryNode<FnLdexp,
3806 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3810 CreateLeaf<QDPType<T1,C1> >::make(l),
3811 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3812}
3813
3814template<class T1,class C1>
3815inline typename MakeReturn<BinaryNode<FnPow,
3816 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3819pow(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3820{
3821 typedef BinaryNode<FnPow,
3822 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3826 CreateLeaf<QDPType<T1,C1> >::make(l),
3827 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3828}
3829
3830template<class T1,class C1>
3831inline typename MakeReturn<BinaryNode<FnFmod,
3832 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3835fmod(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3836{
3837 typedef BinaryNode<FnFmod,
3838 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3842 CreateLeaf<QDPType<T1,C1> >::make(l),
3843 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3844}
3845
3846template<class T1,class C1>
3847inline typename MakeReturn<BinaryNode<FnArcTan2,
3848 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3851atan2(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3852{
3853 typedef BinaryNode<FnArcTan2,
3854 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3858 CreateLeaf<QDPType<T1,C1> >::make(l),
3859 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3860}
3861
3862template<class T1,class C1>
3863inline typename MakeReturn<BinaryNode<OpLT,
3864 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3867operator<(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3868{
3869 typedef BinaryNode<OpLT,
3870 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3874 CreateLeaf<QDPType<T1,C1> >::make(l),
3875 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3876}
3877
3878template<class T1,class C1>
3879inline typename MakeReturn<BinaryNode<OpLE,
3880 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3883operator<=(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3884{
3885 typedef BinaryNode<OpLE,
3886 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3890 CreateLeaf<QDPType<T1,C1> >::make(l),
3891 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3892}
3893
3894template<class T1,class C1>
3895inline typename MakeReturn<BinaryNode<OpGT,
3896 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3899operator>(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3900{
3901 typedef BinaryNode<OpGT,
3902 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3906 CreateLeaf<QDPType<T1,C1> >::make(l),
3907 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3908}
3909
3910template<class T1,class C1>
3911inline typename MakeReturn<BinaryNode<OpGE,
3912 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3915operator>=(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3916{
3917 typedef BinaryNode<OpGE,
3918 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3922 CreateLeaf<QDPType<T1,C1> >::make(l),
3923 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3924}
3925
3926template<class T1,class C1>
3927inline typename MakeReturn<BinaryNode<OpEQ,
3928 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3931operator==(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3932{
3933 typedef BinaryNode<OpEQ,
3934 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3938 CreateLeaf<QDPType<T1,C1> >::make(l),
3939 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3940}
3941
3942template<class T1,class C1>
3943inline typename MakeReturn<BinaryNode<OpNE,
3944 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3947operator!=(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3948{
3949 typedef BinaryNode<OpNE,
3950 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3954 CreateLeaf<QDPType<T1,C1> >::make(l),
3955 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3956}
3957
3958template<class T1,class C1>
3959inline typename MakeReturn<BinaryNode<OpAnd,
3960 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3963operator&&(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3964{
3965 typedef BinaryNode<OpAnd,
3966 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3970 CreateLeaf<QDPType<T1,C1> >::make(l),
3971 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3972}
3973
3974template<class T1,class C1>
3975inline typename MakeReturn<BinaryNode<OpOr,
3976 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3979operator||(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3980{
3981 typedef BinaryNode<OpOr,
3982 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3986 CreateLeaf<QDPType<T1,C1> >::make(l),
3987 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
3988}
3989
3990template<class T1,class C1>
3991inline typename MakeReturn<BinaryNode<OpLeftShift,
3992 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
3995operator<<(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
3996{
3997 typedef BinaryNode<OpLeftShift,
3998 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4002 CreateLeaf<QDPType<T1,C1> >::make(l),
4003 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
4004}
4005
4006template<class T1,class C1>
4007inline typename MakeReturn<BinaryNode<OpRightShift,
4008 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4011operator>>(const QDPType<T1,C1> & l,const typename WordType<C1>::Type_t & r)
4012{
4013 typedef BinaryNode<OpRightShift,
4014 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4018 CreateLeaf<QDPType<T1,C1> >::make(l),
4019 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
4020}
4021
4022template<class T2,class C2>
4023inline typename MakeReturn<BinaryNode<FnCmplx,
4025 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4027cmplx(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4028{
4029 typedef BinaryNode<FnCmplx,
4031 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4034 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4035 CreateLeaf<QDPType<T2,C2> >::make(r)));
4036}
4037
4038template<class T2,class C2>
4039inline typename MakeReturn<BinaryNode<FnOuterProduct,
4041 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4043outerProduct(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4044{
4045 typedef BinaryNode<FnOuterProduct,
4047 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4050 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4051 CreateLeaf<QDPType<T2,C2> >::make(r)));
4052}
4053
4054template<class T2,class C2>
4057 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4059colorVectorContract(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4060{
4063 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4066 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4067 CreateLeaf<QDPType<T2,C2> >::make(r)));
4068}
4069
4070template<class T2,class C2>
4073 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4075colorCrossProduct(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4076{
4079 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4082 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4083 CreateLeaf<QDPType<T2,C2> >::make(r)));
4084}
4085
4086template<class T2,class C2>
4089 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4091localInnerProduct(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4092{
4095 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4098 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4099 CreateLeaf<QDPType<T2,C2> >::make(r)));
4100}
4101
4102template<class T2,class C2>
4105 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4107localInnerProductReal(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4108{
4111 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4114 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4115 CreateLeaf<QDPType<T2,C2> >::make(r)));
4116}
4117
4118template<class T2,class C2>
4121 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4123localColorInnerProduct(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4124{
4127 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4130 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4131 CreateLeaf<QDPType<T2,C2> >::make(r)));
4132}
4133
4134template<class T2,class C2>
4137 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4139quarkContract13(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4140{
4143 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4146 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4147 CreateLeaf<QDPType<T2,C2> >::make(r)));
4148}
4149
4150template<class T2,class C2>
4153 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4155quarkContract14(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4156{
4159 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4162 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4163 CreateLeaf<QDPType<T2,C2> >::make(r)));
4164}
4165
4166template<class T2,class C2>
4169 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4171quarkContract23(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4172{
4175 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4178 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4179 CreateLeaf<QDPType<T2,C2> >::make(r)));
4180}
4181
4182template<class T2,class C2>
4185 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4187quarkContract24(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4188{
4191 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4194 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4195 CreateLeaf<QDPType<T2,C2> >::make(r)));
4196}
4197
4198template<class T2,class C2>
4201 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4203quarkContract12(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4204{
4207 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4210 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4211 CreateLeaf<QDPType<T2,C2> >::make(r)));
4212}
4213
4214template<class T2,class C2>
4217 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4219quarkContract34(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4220{
4223 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4226 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4227 CreateLeaf<QDPType<T2,C2> >::make(r)));
4228}
4229
4230template<class T2,class C2>
4231inline typename MakeReturn<BinaryNode<OpAdd,
4233 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4235operator+(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4236{
4237 typedef BinaryNode<OpAdd,
4239 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4242 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4243 CreateLeaf<QDPType<T2,C2> >::make(r)));
4244}
4245
4246template<class T2,class C2>
4247inline typename MakeReturn<BinaryNode<OpSubtract,
4249 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4251operator-(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4252{
4253 typedef BinaryNode<OpSubtract,
4255 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4258 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4259 CreateLeaf<QDPType<T2,C2> >::make(r)));
4260}
4261
4262template<class T2,class C2>
4263inline typename MakeReturn<BinaryNode<OpMultiply,
4265 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4267operator*(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4268{
4269 typedef BinaryNode<OpMultiply,
4271 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4274 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4275 CreateLeaf<QDPType<T2,C2> >::make(r)));
4276}
4277
4278template<class T2,class C2>
4279inline typename MakeReturn<BinaryNode<OpDivide,
4281 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4283operator/(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4284{
4285 typedef BinaryNode<OpDivide,
4287 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4290 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4291 CreateLeaf<QDPType<T2,C2> >::make(r)));
4292}
4293
4294template<class T2,class C2>
4295inline typename MakeReturn<BinaryNode<OpMod,
4297 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4299operator%(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4300{
4301 typedef BinaryNode<OpMod,
4303 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4306 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4307 CreateLeaf<QDPType<T2,C2> >::make(r)));
4308}
4309
4310template<class T2,class C2>
4311inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
4313 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4315operator&(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4316{
4317 typedef BinaryNode<OpBitwiseAnd,
4319 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4322 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4323 CreateLeaf<QDPType<T2,C2> >::make(r)));
4324}
4325
4326template<class T2,class C2>
4327inline typename MakeReturn<BinaryNode<OpBitwiseOr,
4329 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4331operator|(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4332{
4333 typedef BinaryNode<OpBitwiseOr,
4335 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4338 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4339 CreateLeaf<QDPType<T2,C2> >::make(r)));
4340}
4341
4342template<class T2,class C2>
4343inline typename MakeReturn<BinaryNode<OpBitwiseXor,
4345 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4347operator^(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4348{
4349 typedef BinaryNode<OpBitwiseXor,
4351 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4354 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4355 CreateLeaf<QDPType<T2,C2> >::make(r)));
4356}
4357
4358template<class T2,class C2>
4359inline typename MakeReturn<BinaryNode<FnLdexp,
4361 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4363ldexp(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4364{
4365 typedef BinaryNode<FnLdexp,
4367 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4370 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4371 CreateLeaf<QDPType<T2,C2> >::make(r)));
4372}
4373
4374template<class T2,class C2>
4375inline typename MakeReturn<BinaryNode<FnPow,
4377 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4379pow(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4380{
4381 typedef BinaryNode<FnPow,
4383 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4386 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4387 CreateLeaf<QDPType<T2,C2> >::make(r)));
4388}
4389
4390template<class T2,class C2>
4391inline typename MakeReturn<BinaryNode<FnFmod,
4393 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4395fmod(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4396{
4397 typedef BinaryNode<FnFmod,
4399 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4402 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4403 CreateLeaf<QDPType<T2,C2> >::make(r)));
4404}
4405
4406template<class T2,class C2>
4407inline typename MakeReturn<BinaryNode<FnArcTan2,
4409 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4411atan2(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4412{
4413 typedef BinaryNode<FnArcTan2,
4415 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4418 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4419 CreateLeaf<QDPType<T2,C2> >::make(r)));
4420}
4421
4422template<class T2,class C2>
4423inline typename MakeReturn<BinaryNode<OpLT,
4425 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4427operator<(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4428{
4429 typedef BinaryNode<OpLT,
4431 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4434 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4435 CreateLeaf<QDPType<T2,C2> >::make(r)));
4436}
4437
4438template<class T2,class C2>
4439inline typename MakeReturn<BinaryNode<OpLE,
4441 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4443operator<=(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4444{
4445 typedef BinaryNode<OpLE,
4447 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4450 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4451 CreateLeaf<QDPType<T2,C2> >::make(r)));
4452}
4453
4454template<class T2,class C2>
4455inline typename MakeReturn<BinaryNode<OpGT,
4457 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4459operator>(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4460{
4461 typedef BinaryNode<OpGT,
4463 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4466 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4467 CreateLeaf<QDPType<T2,C2> >::make(r)));
4468}
4469
4470template<class T2,class C2>
4471inline typename MakeReturn<BinaryNode<OpGE,
4473 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4475operator>=(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4476{
4477 typedef BinaryNode<OpGE,
4479 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4482 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4483 CreateLeaf<QDPType<T2,C2> >::make(r)));
4484}
4485
4486template<class T2,class C2>
4487inline typename MakeReturn<BinaryNode<OpEQ,
4489 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4491operator==(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4492{
4493 typedef BinaryNode<OpEQ,
4495 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4498 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4499 CreateLeaf<QDPType<T2,C2> >::make(r)));
4500}
4501
4502template<class T2,class C2>
4503inline typename MakeReturn<BinaryNode<OpNE,
4505 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4507operator!=(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4508{
4509 typedef BinaryNode<OpNE,
4511 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4514 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4515 CreateLeaf<QDPType<T2,C2> >::make(r)));
4516}
4517
4518template<class T2,class C2>
4519inline typename MakeReturn<BinaryNode<OpAnd,
4521 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4523operator&&(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4524{
4525 typedef BinaryNode<OpAnd,
4527 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4530 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4531 CreateLeaf<QDPType<T2,C2> >::make(r)));
4532}
4533
4534template<class T2,class C2>
4535inline typename MakeReturn<BinaryNode<OpOr,
4537 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4539operator||(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4540{
4541 typedef BinaryNode<OpOr,
4543 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4546 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4547 CreateLeaf<QDPType<T2,C2> >::make(r)));
4548}
4549
4550template<class T1,class C1,class T2,class C2>
4551inline typename MakeReturn<TrinaryNode<FnColorContract,
4552 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4553 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
4556colorContract(const QDPType<T1,C1> & a,const QDPType<T2,C2> & b,const typename WordType<C1>::Type_t & c)
4557{
4559 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4560 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
4564 CreateLeaf<QDPType<T1,C1> >::make(a),
4565 CreateLeaf<QDPType<T2,C2> >::make(b),
4566 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(c))));
4567}
4568
4569template<class T1,class C1,class T2,class C2>
4570inline typename MakeReturn<TrinaryNode<FnWhere,
4571 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4572 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
4575where(const QDPType<T1,C1> & a,const QDPType<T2,C2> & b,const typename WordType<C1>::Type_t & c)
4576{
4577 typedef TrinaryNode<FnWhere,
4578 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4579 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
4583 CreateLeaf<QDPType<T1,C1> >::make(a),
4584 CreateLeaf<QDPType<T2,C2> >::make(b),
4585 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(c))));
4586}
4587
4588template<class T1,class C1,class T3,class C3>
4589inline typename MakeReturn<TrinaryNode<FnColorContract,
4590 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4592 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
4594colorContract(const QDPType<T1,C1> & a,const typename WordType<C1>::Type_t & b,const QDPType<T3,C3> & c)
4595{
4597 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4599 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
4602 CreateLeaf<QDPType<T1,C1> >::make(a),
4603 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(b)),
4604 CreateLeaf<QDPType<T3,C3> >::make(c)));
4605}
4606
4607template<class T1,class C1,class T3,class C3>
4608inline typename MakeReturn<TrinaryNode<FnWhere,
4609 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4611 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
4613where(const QDPType<T1,C1> & a,const typename WordType<C1>::Type_t & b,const QDPType<T3,C3> & c)
4614{
4615 typedef TrinaryNode<FnWhere,
4616 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4618 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
4621 CreateLeaf<QDPType<T1,C1> >::make(a),
4622 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(b)),
4623 CreateLeaf<QDPType<T3,C3> >::make(c)));
4624}
4625
4626template<class T1,class C1>
4627inline typename MakeReturn<TrinaryNode<FnColorContract,
4628 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4632colorContract(const QDPType<T1,C1> & a,const typename WordType<C1>::Type_t & b,const typename WordType<C1>::Type_t & c)
4633{
4635 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4638 typedef typename TrinaryReturn<C1,typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t,typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t,FnColorContract>::Type_t Container_t;
4640 CreateLeaf<QDPType<T1,C1> >::make(a),
4641 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(b)),
4642 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(c))));
4643}
4644
4645template<class T1,class C1>
4646inline typename MakeReturn<TrinaryNode<FnWhere,
4647 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4651where(const QDPType<T1,C1> & a,const typename WordType<C1>::Type_t & b,const typename WordType<C1>::Type_t & c)
4652{
4653 typedef TrinaryNode<FnWhere,
4654 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4657 typedef typename TrinaryReturn<C1,typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t,typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t,FnWhere>::Type_t Container_t;
4659 CreateLeaf<QDPType<T1,C1> >::make(a),
4660 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(b)),
4661 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(c))));
4662}
4663
4664template<class T2,class C2>
4665inline typename MakeReturn<TrinaryNode<FnColorContract,
4667 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
4670colorContract(const typename WordType<C2>::Type_t & a,const QDPType<T2,C2> & b,const typename WordType<C2>::Type_t & c)
4671{
4674 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
4676 typedef typename TrinaryReturn<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t,C2,typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t,FnColorContract>::Type_t Container_t;
4678 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(a)),
4679 CreateLeaf<QDPType<T2,C2> >::make(b),
4680 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(c))));
4681}
4682
4683template<class T2,class C2>
4684inline typename MakeReturn<TrinaryNode<FnWhere,
4686 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
4688 typename TrinaryReturn<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t,C2,typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t,FnWhere>::Type_t >::Expression_t
4689where(const typename WordType<C2>::Type_t & a,const QDPType<T2,C2> & b,const typename WordType<C2>::Type_t & c)
4690{
4691 typedef TrinaryNode<FnWhere,
4693 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
4695 typedef typename TrinaryReturn<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t,C2,typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t,FnWhere>::Type_t Container_t;
4697 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(a)),
4698 CreateLeaf<QDPType<T2,C2> >::make(b),
4699 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(c))));
4700}
4701
4702template<class T3,class C3>
4703inline typename MakeReturn<TrinaryNode<FnColorContract,
4706 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
4708colorContract(const typename WordType<C3>::Type_t & a,const typename WordType<C3>::Type_t & b,const QDPType<T3,C3> & c)
4709{
4713 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
4714 typedef typename TrinaryReturn<typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t,typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t,C3,FnColorContract>::Type_t Container_t;
4716 CreateLeaf<typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t(a)),
4717 CreateLeaf<typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t(b)),
4718 CreateLeaf<QDPType<T3,C3> >::make(c)));
4719}
4720
4721template<class T3,class C3>
4722inline typename MakeReturn<TrinaryNode<FnWhere,
4725 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
4726 typename TrinaryReturn<typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t,typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t,C3,FnWhere>::Type_t >::Expression_t
4727where(const typename WordType<C3>::Type_t & a,const typename WordType<C3>::Type_t & b,const QDPType<T3,C3> & c)
4728{
4729 typedef TrinaryNode<FnWhere,
4732 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
4733 typedef typename TrinaryReturn<typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t,typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t,C3,FnWhere>::Type_t Container_t;
4735 CreateLeaf<typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t(a)),
4736 CreateLeaf<typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t(b)),
4737 CreateLeaf<QDPType<T3,C3> >::make(c)));
4738}
4739#ifdef PETE_ALLOW_SCALAR_SHIFT
4740
4741template<class T2,class C2>
4742inline typename MakeReturn<BinaryNode<OpLeftShift,
4744 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4746operator<<(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4747{
4748 typedef BinaryNode<OpLeftShift,
4750 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4753 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4754 CreateLeaf<QDPType<T2,C2> >::make(r)));
4755}
4756
4757template<class T2,class C2>
4758inline typename MakeReturn<BinaryNode<OpRightShift,
4760 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t>,
4762operator>>(const typename WordType<C2>::Type_t & l,const QDPType<T2,C2> & r)
4763{
4764 typedef BinaryNode<OpRightShift,
4766 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t> Tree_t;
4769 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
4770 CreateLeaf<QDPType<T2,C2> >::make(r)));
4771}
4772#endif // PETE_ALLOW_SCALAR_SHIFT
4773
4775
4792template<class T1,class C1,class T2,class C2,class T3,class C3>
4793inline typename MakeReturn<TrinaryNode<FnColorContract,
4794 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4795 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
4796 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
4798colorContract(const QDPType<T1,C1> & a,const QDPType<T2,C2> & b,const QDPType<T3,C3> & c)
4799{
4801 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4802 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
4803 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
4804 typedef typename TrinaryReturn<C1,C2,C3,FnColorContract>::Type_t Container_t;
4806 CreateLeaf<QDPType<T1,C1> >::make(a),
4807 CreateLeaf<QDPType<T2,C2> >::make(b),
4808 CreateLeaf<QDPType<T3,C3> >::make(c)));
4809}
4810
4812
4816template<class T1,class C1,class T2,class C2,class T3,class C3>
4817inline typename MakeReturn<TrinaryNode<FnWhere,
4818 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4819 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
4820 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
4822where(const QDPType<T1,C1> & a,const QDPType<T2,C2> & b,const QDPType<T3,C3> & c)
4823{
4824 typedef TrinaryNode<FnWhere,
4825 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
4826 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
4827 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
4828 typedef typename TrinaryReturn<C1,C2,C3,FnWhere>::Type_t Container_t;
4830 CreateLeaf<QDPType<T1,C1> >::make(a),
4831 CreateLeaf<QDPType<T2,C2> >::make(b),
4832 CreateLeaf<QDPType<T3,C3> >::make(c)));
4833}
4834#ifndef PETE_EXPRESSION_OPERATORS
4835#define PETE_EXPRESSION_OPERATORS
4836
4837template<class T1,class C1>
4838inline typename MakeReturn<UnaryNode<FnAdjoint,
4839 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
4841adj(const QDPExpr<T1,C1> & l)
4842{
4843 typedef UnaryNode<FnAdjoint,
4844 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
4845 typedef typename UnaryReturn<C1,FnAdjoint >::Type_t Container_t;
4847 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
4848}
4849
4850template<class T1,class C1>
4851inline typename MakeReturn<UnaryNode<FnConjugate,
4852 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
4854conj(const QDPExpr<T1,C1> & l)
4855{
4856 typedef UnaryNode<FnConjugate,
4857 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
4858 typedef typename UnaryReturn<C1,FnConjugate >::Type_t Container_t;
4860 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
4861}
4862
4863template<class T1,class C1>
4864inline typename MakeReturn<UnaryNode<FnTranspose,
4865 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
4867transpose(const QDPExpr<T1,C1> & l)
4868{
4869 typedef UnaryNode<FnTranspose,
4870 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
4871 typedef typename UnaryReturn<C1,FnTranspose >::Type_t Container_t;
4873 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
4874}
4875
4876template<class T1,class C1>
4877inline typename MakeReturn<UnaryNode<FnTransposeColor,
4878 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
4880transposeColor(const QDPExpr<T1,C1> & l)
4881{
4883 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
4884 typedef typename UnaryReturn<C1,FnTransposeColor >::Type_t Container_t;
4886 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
4887}
4888
4889template<class T1,class C1>
4890inline typename MakeReturn<UnaryNode<FnTransposeSpin,
4891 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
4893transposeSpin(const QDPExpr<T1,C1> & l)
4894{
4895 typedef UnaryNode<FnTransposeSpin,
4896 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
4897 typedef typename UnaryReturn<C1,FnTransposeSpin >::Type_t Container_t;
4899 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
4900}
4901
4902template<class T1,class C1>
4903inline typename MakeReturn<UnaryNode<FnTrace,
4904 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
4906trace(const QDPExpr<T1,C1> & l)
4907{
4908 typedef UnaryNode<FnTrace,
4909 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
4910 typedef typename UnaryReturn<C1,FnTrace >::Type_t Container_t;
4912 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
4913}
4914
4915template<class T1,class C1>
4916inline typename MakeReturn<UnaryNode<FnRealTrace,
4917 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
4919realTrace(const QDPExpr<T1,C1> & l)
4920{
4921 typedef UnaryNode<FnRealTrace,
4922 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
4923 typedef typename UnaryReturn<C1,FnRealTrace >::Type_t Container_t;
4925 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
4926}
4927
4928template<class T1,class C1>
4929inline typename MakeReturn<UnaryNode<FnImagTrace,
4930 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
4932imagTrace(const QDPExpr<T1,C1> & l)
4933{
4934 typedef UnaryNode<FnImagTrace,
4935 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
4936 typedef typename UnaryReturn<C1,FnImagTrace >::Type_t Container_t;
4938 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
4939}
4940
4941template<class T1,class C1>
4942inline typename MakeReturn<UnaryNode<FnTraceColor,
4943 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
4945traceColor(const QDPExpr<T1,C1> & l)
4946{
4947 typedef UnaryNode<FnTraceColor,
4948 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
4949 typedef typename UnaryReturn<C1,FnTraceColor >::Type_t Container_t;
4951 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
4952}
4953
4954template<class T1,class C1>
4955inline typename MakeReturn<UnaryNode<FnTraceSpin,
4956 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
4958traceSpin(const QDPExpr<T1,C1> & l)
4959{
4960 typedef UnaryNode<FnTraceSpin,
4961 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
4962 typedef typename UnaryReturn<C1,FnTraceSpin >::Type_t Container_t;
4964 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
4965}
4966
4967template<class T1,class C1>
4968inline typename MakeReturn<UnaryNode<FnReal,
4969 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
4971real(const QDPExpr<T1,C1> & l)
4972{
4973 typedef UnaryNode<FnReal,
4974 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
4975 typedef typename UnaryReturn<C1,FnReal >::Type_t Container_t;
4977 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
4978}
4979
4980template<class T1,class C1>
4981inline typename MakeReturn<UnaryNode<FnImag,
4982 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
4984imag(const QDPExpr<T1,C1> & l)
4985{
4986 typedef UnaryNode<FnImag,
4987 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
4988 typedef typename UnaryReturn<C1,FnImag >::Type_t Container_t;
4990 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
4991}
4992
4993template<class T1,class C1>
4994inline typename MakeReturn<UnaryNode<FnLocalNorm2,
4995 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
4997localNorm2(const QDPExpr<T1,C1> & l)
4998{
4999 typedef UnaryNode<FnLocalNorm2,
5000 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5001 typedef typename UnaryReturn<C1,FnLocalNorm2 >::Type_t Container_t;
5003 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5004}
5005
5006template<class T1,class C1>
5007inline typename MakeReturn<UnaryNode<FnTimesI,
5008 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5010timesI(const QDPExpr<T1,C1> & l)
5011{
5012 typedef UnaryNode<FnTimesI,
5013 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5014 typedef typename UnaryReturn<C1,FnTimesI >::Type_t Container_t;
5016 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5017}
5018
5019template<class T1,class C1>
5020inline typename MakeReturn<UnaryNode<FnTimesMinusI,
5021 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5023timesMinusI(const QDPExpr<T1,C1> & l)
5024{
5025 typedef UnaryNode<FnTimesMinusI,
5026 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5027 typedef typename UnaryReturn<C1,FnTimesMinusI >::Type_t Container_t;
5029 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5030}
5031
5032template<class T1,class C1>
5033inline typename MakeReturn<UnaryNode<FnSeedToFloat,
5034 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5036seedToFloat(const QDPExpr<T1,C1> & l)
5037{
5038 typedef UnaryNode<FnSeedToFloat,
5039 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5040 typedef typename UnaryReturn<C1,FnSeedToFloat >::Type_t Container_t;
5042 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5043}
5044
5045template<class T1,class C1>
5047 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5049spinProjectDir0Plus(const QDPExpr<T1,C1> & l)
5050{
5052 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5053 typedef typename UnaryReturn<C1,FnSpinProjectDir0Plus >::Type_t Container_t;
5055 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5056}
5057
5058template<class T1,class C1>
5060 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5062spinProjectDir1Plus(const QDPExpr<T1,C1> & l)
5063{
5065 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5066 typedef typename UnaryReturn<C1,FnSpinProjectDir1Plus >::Type_t Container_t;
5068 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5069}
5070
5071template<class T1,class C1>
5073 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5075spinProjectDir2Plus(const QDPExpr<T1,C1> & l)
5076{
5078 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5079 typedef typename UnaryReturn<C1,FnSpinProjectDir2Plus >::Type_t Container_t;
5081 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5082}
5083
5084template<class T1,class C1>
5086 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5088spinProjectDir3Plus(const QDPExpr<T1,C1> & l)
5089{
5091 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5092 typedef typename UnaryReturn<C1,FnSpinProjectDir3Plus >::Type_t Container_t;
5094 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5095}
5096
5097template<class T1,class C1>
5099 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5101spinProjectDir0Minus(const QDPExpr<T1,C1> & l)
5102{
5104 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5105 typedef typename UnaryReturn<C1,FnSpinProjectDir0Minus >::Type_t Container_t;
5107 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5108}
5109
5110template<class T1,class C1>
5112 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5114spinProjectDir1Minus(const QDPExpr<T1,C1> & l)
5115{
5117 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5118 typedef typename UnaryReturn<C1,FnSpinProjectDir1Minus >::Type_t Container_t;
5120 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5121}
5122
5123template<class T1,class C1>
5125 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5127spinProjectDir2Minus(const QDPExpr<T1,C1> & l)
5128{
5130 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5131 typedef typename UnaryReturn<C1,FnSpinProjectDir2Minus >::Type_t Container_t;
5133 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5134}
5135
5136template<class T1,class C1>
5138 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5140spinProjectDir3Minus(const QDPExpr<T1,C1> & l)
5141{
5143 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5144 typedef typename UnaryReturn<C1,FnSpinProjectDir3Minus >::Type_t Container_t;
5146 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5147}
5148
5149template<class T1,class C1>
5151 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5153spinReconstructDir0Plus(const QDPExpr<T1,C1> & l)
5154{
5156 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5157 typedef typename UnaryReturn<C1,FnSpinReconstructDir0Plus >::Type_t Container_t;
5159 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5160}
5161
5162template<class T1,class C1>
5164 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5166spinReconstructDir1Plus(const QDPExpr<T1,C1> & l)
5167{
5169 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5170 typedef typename UnaryReturn<C1,FnSpinReconstructDir1Plus >::Type_t Container_t;
5172 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5173}
5174
5175template<class T1,class C1>
5177 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5179spinReconstructDir2Plus(const QDPExpr<T1,C1> & l)
5180{
5182 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5183 typedef typename UnaryReturn<C1,FnSpinReconstructDir2Plus >::Type_t Container_t;
5185 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5186}
5187
5188template<class T1,class C1>
5190 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5192spinReconstructDir3Plus(const QDPExpr<T1,C1> & l)
5193{
5195 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5196 typedef typename UnaryReturn<C1,FnSpinReconstructDir3Plus >::Type_t Container_t;
5198 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5199}
5200
5201template<class T1,class C1>
5203 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5205spinReconstructDir0Minus(const QDPExpr<T1,C1> & l)
5206{
5208 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5209 typedef typename UnaryReturn<C1,FnSpinReconstructDir0Minus >::Type_t Container_t;
5211 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5212}
5213
5214template<class T1,class C1>
5216 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5218spinReconstructDir1Minus(const QDPExpr<T1,C1> & l)
5219{
5221 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5222 typedef typename UnaryReturn<C1,FnSpinReconstructDir1Minus >::Type_t Container_t;
5224 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5225}
5226
5227template<class T1,class C1>
5229 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5231spinReconstructDir2Minus(const QDPExpr<T1,C1> & l)
5232{
5234 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5235 typedef typename UnaryReturn<C1,FnSpinReconstructDir2Minus >::Type_t Container_t;
5237 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5238}
5239
5240template<class T1,class C1>
5242 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5244spinReconstructDir3Minus(const QDPExpr<T1,C1> & l)
5245{
5247 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5248 typedef typename UnaryReturn<C1,FnSpinReconstructDir3Minus >::Type_t Container_t;
5250 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5251}
5252
5253template<class T1,class C1>
5255 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5257chiralProjectPlus(const QDPExpr<T1,C1> & l)
5258{
5260 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5261 typedef typename UnaryReturn<C1,FnChiralProjectPlus >::Type_t Container_t;
5263 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5264}
5265
5266template<class T1,class C1>
5268 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5270chiralProjectMinus(const QDPExpr<T1,C1> & l)
5271{
5273 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5274 typedef typename UnaryReturn<C1,FnChiralProjectMinus >::Type_t Container_t;
5276 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5277}
5278
5279template<class T1,class C1>
5280inline typename MakeReturn<UnaryNode<FnArcCos,
5281 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5283acos(const QDPExpr<T1,C1> & l)
5284{
5285 typedef UnaryNode<FnArcCos,
5286 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5287 typedef typename UnaryReturn<C1,FnArcCos >::Type_t Container_t;
5289 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5290}
5291
5292template<class T1,class C1>
5293inline typename MakeReturn<UnaryNode<FnArcSin,
5294 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5296asin(const QDPExpr<T1,C1> & l)
5297{
5298 typedef UnaryNode<FnArcSin,
5299 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5300 typedef typename UnaryReturn<C1,FnArcSin >::Type_t Container_t;
5302 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5303}
5304
5305template<class T1,class C1>
5306inline typename MakeReturn<UnaryNode<FnArcTan,
5307 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5309atan(const QDPExpr<T1,C1> & l)
5310{
5311 typedef UnaryNode<FnArcTan,
5312 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5313 typedef typename UnaryReturn<C1,FnArcTan >::Type_t Container_t;
5315 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5316}
5317
5318template<class T1,class C1>
5319inline typename MakeReturn<UnaryNode<FnCeil,
5320 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5322ceil(const QDPExpr<T1,C1> & l)
5323{
5324 typedef UnaryNode<FnCeil,
5325 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5326 typedef typename UnaryReturn<C1,FnCeil >::Type_t Container_t;
5328 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5329}
5330
5331template<class T1,class C1>
5332inline typename MakeReturn<UnaryNode<FnCos,
5333 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5335cos(const QDPExpr<T1,C1> & l)
5336{
5337 typedef UnaryNode<FnCos,
5338 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5339 typedef typename UnaryReturn<C1,FnCos >::Type_t Container_t;
5341 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5342}
5343
5344template<class T1,class C1>
5345inline typename MakeReturn<UnaryNode<FnHypCos,
5346 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5348cosh(const QDPExpr<T1,C1> & l)
5349{
5350 typedef UnaryNode<FnHypCos,
5351 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5352 typedef typename UnaryReturn<C1,FnHypCos >::Type_t Container_t;
5354 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5355}
5356
5357template<class T1,class C1>
5358inline typename MakeReturn<UnaryNode<FnExp,
5359 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5361exp(const QDPExpr<T1,C1> & l)
5362{
5363 typedef UnaryNode<FnExp,
5364 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5365 typedef typename UnaryReturn<C1,FnExp >::Type_t Container_t;
5367 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5368}
5369
5370template<class T1,class C1>
5371inline typename MakeReturn<UnaryNode<FnFabs,
5372 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5374fabs(const QDPExpr<T1,C1> & l)
5375{
5376 typedef UnaryNode<FnFabs,
5377 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5378 typedef typename UnaryReturn<C1,FnFabs >::Type_t Container_t;
5380 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5381}
5382
5383template<class T1,class C1>
5384inline typename MakeReturn<UnaryNode<FnFloor,
5385 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5387floor(const QDPExpr<T1,C1> & l)
5388{
5389 typedef UnaryNode<FnFloor,
5390 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5391 typedef typename UnaryReturn<C1,FnFloor >::Type_t Container_t;
5393 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5394}
5395
5396template<class T1,class C1>
5397inline typename MakeReturn<UnaryNode<FnLog,
5398 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5400log(const QDPExpr<T1,C1> & l)
5401{
5402 typedef UnaryNode<FnLog,
5403 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5404 typedef typename UnaryReturn<C1,FnLog >::Type_t Container_t;
5406 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5407}
5408
5409template<class T1,class C1>
5410inline typename MakeReturn<UnaryNode<FnLog10,
5411 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5413log10(const QDPExpr<T1,C1> & l)
5414{
5415 typedef UnaryNode<FnLog10,
5416 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5417 typedef typename UnaryReturn<C1,FnLog10 >::Type_t Container_t;
5419 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5420}
5421
5422template<class T1,class C1>
5423inline typename MakeReturn<UnaryNode<FnSin,
5424 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5426sin(const QDPExpr<T1,C1> & l)
5427{
5428 typedef UnaryNode<FnSin,
5429 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5430 typedef typename UnaryReturn<C1,FnSin >::Type_t Container_t;
5432 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5433}
5434
5435template<class T1,class C1>
5436inline typename MakeReturn<UnaryNode<FnHypSin,
5437 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5439sinh(const QDPExpr<T1,C1> & l)
5440{
5441 typedef UnaryNode<FnHypSin,
5442 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5443 typedef typename UnaryReturn<C1,FnHypSin >::Type_t Container_t;
5445 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5446}
5447
5448template<class T1,class C1>
5449inline typename MakeReturn<UnaryNode<FnSqrt,
5450 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5452sqrt(const QDPExpr<T1,C1> & l)
5453{
5454 typedef UnaryNode<FnSqrt,
5455 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5456 typedef typename UnaryReturn<C1,FnSqrt >::Type_t Container_t;
5458 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5459}
5460
5461template<class T1,class C1>
5462inline typename MakeReturn<UnaryNode<FnTan,
5463 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5465tan(const QDPExpr<T1,C1> & l)
5466{
5467 typedef UnaryNode<FnTan,
5468 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5469 typedef typename UnaryReturn<C1,FnTan >::Type_t Container_t;
5471 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5472}
5473
5474template<class T1,class C1>
5475inline typename MakeReturn<UnaryNode<FnHypTan,
5476 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5478tanh(const QDPExpr<T1,C1> & l)
5479{
5480 typedef UnaryNode<FnHypTan,
5481 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5482 typedef typename UnaryReturn<C1,FnHypTan >::Type_t Container_t;
5484 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5485}
5486
5487template<class T1,class C1>
5488inline typename MakeReturn<UnaryNode<OpUnaryMinus,
5489 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5491operator-(const QDPExpr<T1,C1> & l)
5492{
5493 typedef UnaryNode<OpUnaryMinus,
5494 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5495 typedef typename UnaryReturn<C1,OpUnaryMinus >::Type_t Container_t;
5497 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5498}
5499
5500template<class T1,class C1>
5501inline typename MakeReturn<UnaryNode<OpUnaryPlus,
5502 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5504operator+(const QDPExpr<T1,C1> & l)
5505{
5506 typedef UnaryNode<OpUnaryPlus,
5507 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5508 typedef typename UnaryReturn<C1,OpUnaryPlus >::Type_t Container_t;
5510 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5511}
5512
5513template<class T1,class C1>
5514inline typename MakeReturn<UnaryNode<OpBitwiseNot,
5515 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5517operator~(const QDPExpr<T1,C1> & l)
5518{
5519 typedef UnaryNode<OpBitwiseNot,
5520 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5521 typedef typename UnaryReturn<C1,OpBitwiseNot >::Type_t Container_t;
5523 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5524}
5525
5526template<class T1,class C1>
5527inline typename MakeReturn<UnaryNode<OpIdentity,
5528 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5530PETE_identity(const QDPExpr<T1,C1> & l)
5531{
5532 typedef UnaryNode<OpIdentity,
5533 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5534 typedef typename UnaryReturn<C1,OpIdentity >::Type_t Container_t;
5536 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5537}
5538
5539template<class T1,class C1>
5540inline typename MakeReturn<UnaryNode<OpNot,
5541 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t>,
5543operator!(const QDPExpr<T1,C1> & l)
5544{
5545 typedef UnaryNode<OpNot,
5546 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t> Tree_t;
5547 typedef typename UnaryReturn<C1,OpNot >::Type_t Container_t;
5549 CreateLeaf<QDPExpr<T1,C1> >::make(l)));
5550}
5551
5552template<class T1,class C1,class T2,class C2>
5553inline typename MakeReturn<BinaryNode<FnCmplx,
5554 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5555 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5557cmplx(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5558{
5559 typedef BinaryNode<FnCmplx,
5560 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5561 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5562 typedef typename BinaryReturn<C1,C2,FnCmplx>::Type_t Container_t;
5564 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5565 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5566}
5567
5568template<class T1,class C1,class T2,class C2>
5569inline typename MakeReturn<BinaryNode<FnOuterProduct,
5570 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5571 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5573outerProduct(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5574{
5575 typedef BinaryNode<FnOuterProduct,
5576 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5577 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5578 typedef typename BinaryReturn<C1,C2,FnOuterProduct>::Type_t Container_t;
5580 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5581 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5582}
5583
5584template<class T1,class C1,class T2,class C2>
5586 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5587 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5589colorVectorContract(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5590{
5592 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5593 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5594 typedef typename BinaryReturn<C1,C2,FnColorVectorContract>::Type_t Container_t;
5596 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5597 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5598}
5599
5600template<class T1,class C1,class T2,class C2>
5602 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5603 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5605colorCrossProduct(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5606{
5608 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5609 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5610 typedef typename BinaryReturn<C1,C2,FnColorCrossProduct>::Type_t Container_t;
5612 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5613 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5614}
5615
5616template<class T1,class C1,class T2,class C2>
5618 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5619 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5621localInnerProduct(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5622{
5624 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5625 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5626 typedef typename BinaryReturn<C1,C2,FnLocalInnerProduct>::Type_t Container_t;
5628 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5629 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5630}
5631
5632template<class T1,class C1,class T2,class C2>
5634 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5635 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5637localInnerProductReal(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5638{
5640 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5641 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5642 typedef typename BinaryReturn<C1,C2,FnLocalInnerProductReal>::Type_t Container_t;
5644 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5645 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5646}
5647
5648template<class T1,class C1,class T2,class C2>
5650 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5651 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5653localColorInnerProduct(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5654{
5656 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5657 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5658 typedef typename BinaryReturn<C1,C2,FnLocalColorInnerProduct>::Type_t Container_t;
5660 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5661 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5662}
5663
5664template<class T1,class C1,class T2,class C2>
5666 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5667 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5669quarkContract13(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5670{
5672 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5673 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5674 typedef typename BinaryReturn<C1,C2,FnQuarkContract13>::Type_t Container_t;
5676 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5677 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5678}
5679
5680template<class T1,class C1,class T2,class C2>
5682 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5683 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5685quarkContract14(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5686{
5688 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5689 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5690 typedef typename BinaryReturn<C1,C2,FnQuarkContract14>::Type_t Container_t;
5692 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5693 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5694}
5695
5696template<class T1,class C1,class T2,class C2>
5698 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5699 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5701quarkContract23(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5702{
5704 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5705 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5706 typedef typename BinaryReturn<C1,C2,FnQuarkContract23>::Type_t Container_t;
5708 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5709 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5710}
5711
5712template<class T1,class C1,class T2,class C2>
5714 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5715 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5717quarkContract24(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5718{
5720 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5721 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5722 typedef typename BinaryReturn<C1,C2,FnQuarkContract24>::Type_t Container_t;
5724 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5725 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5726}
5727
5728template<class T1,class C1,class T2,class C2>
5730 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5731 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5733quarkContract12(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5734{
5736 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5737 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5738 typedef typename BinaryReturn<C1,C2,FnQuarkContract12>::Type_t Container_t;
5740 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5741 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5742}
5743
5744template<class T1,class C1,class T2,class C2>
5746 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5747 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5749quarkContract34(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5750{
5752 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5753 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5754 typedef typename BinaryReturn<C1,C2,FnQuarkContract34>::Type_t Container_t;
5756 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5757 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5758}
5759
5760template<class T1,class C1,class T2,class C2>
5761inline typename MakeReturn<BinaryNode<OpAdd,
5762 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5763 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5765operator+(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5766{
5767 typedef BinaryNode<OpAdd,
5768 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5769 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5770 typedef typename BinaryReturn<C1,C2,OpAdd>::Type_t Container_t;
5772 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5773 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5774}
5775
5776template<class T1,class C1,class T2,class C2>
5777inline typename MakeReturn<BinaryNode<OpSubtract,
5778 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5779 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5781operator-(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5782{
5783 typedef BinaryNode<OpSubtract,
5784 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5785 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5786 typedef typename BinaryReturn<C1,C2,OpSubtract>::Type_t Container_t;
5788 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5789 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5790}
5791
5792template<class T1,class C1,class T2,class C2>
5793inline typename MakeReturn<BinaryNode<OpMultiply,
5794 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5795 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5797operator*(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5798{
5799 typedef BinaryNode<OpMultiply,
5800 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5801 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5802 typedef typename BinaryReturn<C1,C2,OpMultiply>::Type_t Container_t;
5804 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5805 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5806}
5807
5808template<class T1,class C1,class T2,class C2>
5809inline typename MakeReturn<BinaryNode<OpDivide,
5810 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5811 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5813operator/(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5814{
5815 typedef BinaryNode<OpDivide,
5816 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5817 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5818 typedef typename BinaryReturn<C1,C2,OpDivide>::Type_t Container_t;
5820 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5821 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5822}
5823
5824template<class T1,class C1,class T2,class C2>
5825inline typename MakeReturn<BinaryNode<OpMod,
5826 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5827 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5829operator%(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5830{
5831 typedef BinaryNode<OpMod,
5832 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5833 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5834 typedef typename BinaryReturn<C1,C2,OpMod>::Type_t Container_t;
5836 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5837 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5838}
5839
5840template<class T1,class C1,class T2,class C2>
5841inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
5842 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5843 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5845operator&(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5846{
5847 typedef BinaryNode<OpBitwiseAnd,
5848 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5849 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5850 typedef typename BinaryReturn<C1,C2,OpBitwiseAnd>::Type_t Container_t;
5852 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5853 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5854}
5855
5856template<class T1,class C1,class T2,class C2>
5857inline typename MakeReturn<BinaryNode<OpBitwiseOr,
5858 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5859 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5861operator|(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5862{
5863 typedef BinaryNode<OpBitwiseOr,
5864 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5865 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5866 typedef typename BinaryReturn<C1,C2,OpBitwiseOr>::Type_t Container_t;
5868 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5869 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5870}
5871
5872template<class T1,class C1,class T2,class C2>
5873inline typename MakeReturn<BinaryNode<OpBitwiseXor,
5874 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5875 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5877operator^(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5878{
5879 typedef BinaryNode<OpBitwiseXor,
5880 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5881 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5882 typedef typename BinaryReturn<C1,C2,OpBitwiseXor>::Type_t Container_t;
5884 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5885 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5886}
5887
5888template<class T1,class C1,class T2,class C2>
5889inline typename MakeReturn<BinaryNode<FnLdexp,
5890 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5891 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5893ldexp(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5894{
5895 typedef BinaryNode<FnLdexp,
5896 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5897 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5898 typedef typename BinaryReturn<C1,C2,FnLdexp>::Type_t Container_t;
5900 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5901 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5902}
5903
5904template<class T1,class C1,class T2,class C2>
5905inline typename MakeReturn<BinaryNode<FnPow,
5906 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5907 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5909pow(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5910{
5911 typedef BinaryNode<FnPow,
5912 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5913 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5914 typedef typename BinaryReturn<C1,C2,FnPow>::Type_t Container_t;
5916 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5917 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5918}
5919
5920template<class T1,class C1,class T2,class C2>
5921inline typename MakeReturn<BinaryNode<FnFmod,
5922 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5923 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5925fmod(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5926{
5927 typedef BinaryNode<FnFmod,
5928 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5929 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5930 typedef typename BinaryReturn<C1,C2,FnFmod>::Type_t Container_t;
5932 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5933 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5934}
5935
5936template<class T1,class C1,class T2,class C2>
5937inline typename MakeReturn<BinaryNode<FnArcTan2,
5938 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5939 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5941atan2(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5942{
5943 typedef BinaryNode<FnArcTan2,
5944 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5945 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5946 typedef typename BinaryReturn<C1,C2,FnArcTan2>::Type_t Container_t;
5948 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5949 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5950}
5951
5952template<class T1,class C1,class T2,class C2>
5953inline typename MakeReturn<BinaryNode<OpLT,
5954 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5955 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5957operator<(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5958{
5959 typedef BinaryNode<OpLT,
5960 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5961 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5962 typedef typename BinaryReturn<C1,C2,OpLT>::Type_t Container_t;
5964 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5965 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5966}
5967
5968template<class T1,class C1,class T2,class C2>
5969inline typename MakeReturn<BinaryNode<OpLE,
5970 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5971 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5973operator<=(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5974{
5975 typedef BinaryNode<OpLE,
5976 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5977 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5978 typedef typename BinaryReturn<C1,C2,OpLE>::Type_t Container_t;
5980 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5981 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5982}
5983
5984template<class T1,class C1,class T2,class C2>
5985inline typename MakeReturn<BinaryNode<OpGT,
5986 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5987 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
5989operator>(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
5990{
5991 typedef BinaryNode<OpGT,
5992 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
5993 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
5994 typedef typename BinaryReturn<C1,C2,OpGT>::Type_t Container_t;
5996 CreateLeaf<QDPExpr<T1,C1> >::make(l),
5997 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
5998}
5999
6000template<class T1,class C1,class T2,class C2>
6001inline typename MakeReturn<BinaryNode<OpGE,
6002 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6003 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6005operator>=(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
6006{
6007 typedef BinaryNode<OpGE,
6008 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6009 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6010 typedef typename BinaryReturn<C1,C2,OpGE>::Type_t Container_t;
6012 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6013 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6014}
6015
6016template<class T1,class C1,class T2,class C2>
6017inline typename MakeReturn<BinaryNode<OpEQ,
6018 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6019 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6021operator==(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
6022{
6023 typedef BinaryNode<OpEQ,
6024 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6025 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6026 typedef typename BinaryReturn<C1,C2,OpEQ>::Type_t Container_t;
6028 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6029 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6030}
6031
6032template<class T1,class C1,class T2,class C2>
6033inline typename MakeReturn<BinaryNode<OpNE,
6034 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6035 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6037operator!=(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
6038{
6039 typedef BinaryNode<OpNE,
6040 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6041 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6042 typedef typename BinaryReturn<C1,C2,OpNE>::Type_t Container_t;
6044 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6045 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6046}
6047
6048template<class T1,class C1,class T2,class C2>
6049inline typename MakeReturn<BinaryNode<OpAnd,
6050 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6051 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6053operator&&(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
6054{
6055 typedef BinaryNode<OpAnd,
6056 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6057 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6058 typedef typename BinaryReturn<C1,C2,OpAnd>::Type_t Container_t;
6060 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6061 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6062}
6063
6064template<class T1,class C1,class T2,class C2>
6065inline typename MakeReturn<BinaryNode<OpOr,
6066 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6067 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6069operator||(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
6070{
6071 typedef BinaryNode<OpOr,
6072 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6073 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6074 typedef typename BinaryReturn<C1,C2,OpOr>::Type_t Container_t;
6076 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6077 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6078}
6079
6080template<class T1,class C1,class T2,class C2>
6081inline typename MakeReturn<BinaryNode<OpLeftShift,
6082 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6083 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6085operator<<(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
6086{
6087 typedef BinaryNode<OpLeftShift,
6088 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6089 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6090 typedef typename BinaryReturn<C1,C2,OpLeftShift>::Type_t Container_t;
6092 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6093 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6094}
6095
6096template<class T1,class C1,class T2,class C2>
6097inline typename MakeReturn<BinaryNode<OpRightShift,
6098 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6099 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6101operator>>(const QDPExpr<T1,C1> & l,const QDPExpr<T2,C2> & r)
6102{
6103 typedef BinaryNode<OpRightShift,
6104 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6105 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6106 typedef typename BinaryReturn<C1,C2,OpRightShift>::Type_t Container_t;
6108 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6109 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6110}
6111
6112template<class T1,class C1,class T2,class C2,class T3,class C3>
6113inline typename MakeReturn<TrinaryNode<FnColorContract,
6114 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6115 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
6116 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
6118colorContract(const QDPExpr<T1,C1> & a,const QDPExpr<T2,C2> & b,const QDPExpr<T3,C3> & c)
6119{
6121 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6122 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
6123 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
6124 typedef typename TrinaryReturn<C1,C2,C3,FnColorContract>::Type_t Container_t;
6126 CreateLeaf<QDPExpr<T1,C1> >::make(a),
6127 CreateLeaf<QDPExpr<T2,C2> >::make(b),
6128 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
6129}
6130
6131template<class T1,class C1,class T2,class C2,class T3,class C3>
6132inline typename MakeReturn<TrinaryNode<FnWhere,
6133 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6134 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
6135 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
6137where(const QDPExpr<T1,C1> & a,const QDPExpr<T2,C2> & b,const QDPExpr<T3,C3> & c)
6138{
6139 typedef TrinaryNode<FnWhere,
6140 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6141 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
6142 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
6143 typedef typename TrinaryReturn<C1,C2,C3,FnWhere>::Type_t Container_t;
6145 CreateLeaf<QDPExpr<T1,C1> >::make(a),
6146 CreateLeaf<QDPExpr<T2,C2> >::make(b),
6147 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
6148}
6149
6150template<class T1,class C1>
6151inline typename MakeReturn<BinaryNode<FnCmplx,
6152 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6155cmplx(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6156{
6157 typedef BinaryNode<FnCmplx,
6158 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6162 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6163 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6164}
6165
6166template<class T1,class C1>
6167inline typename MakeReturn<BinaryNode<FnOuterProduct,
6168 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6171outerProduct(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6172{
6173 typedef BinaryNode<FnOuterProduct,
6174 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6178 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6179 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6180}
6181
6182template<class T1,class C1>
6184 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6187colorVectorContract(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6188{
6190 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6194 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6195 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6196}
6197
6198template<class T1,class C1>
6200 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6203colorCrossProduct(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6204{
6206 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6210 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6211 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6212}
6213
6214template<class T1,class C1>
6216 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6219localInnerProduct(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6220{
6222 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6226 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6227 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6228}
6229
6230template<class T1,class C1>
6232 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6235localInnerProductReal(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6236{
6238 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6242 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6243 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6244}
6245
6246template<class T1,class C1>
6248 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6251localColorInnerProduct(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6252{
6254 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6258 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6259 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6260}
6261
6262template<class T1,class C1>
6264 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6267quarkContract13(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6268{
6270 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6274 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6275 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6276}
6277
6278template<class T1,class C1>
6280 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6283quarkContract14(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6284{
6286 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6290 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6291 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6292}
6293
6294template<class T1,class C1>
6296 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6299quarkContract23(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6300{
6302 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6306 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6307 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6308}
6309
6310template<class T1,class C1>
6312 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6315quarkContract24(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6316{
6318 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6322 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6323 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6324}
6325
6326template<class T1,class C1>
6328 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6331quarkContract12(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6332{
6334 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6338 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6339 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6340}
6341
6342template<class T1,class C1>
6344 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6347quarkContract34(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6348{
6350 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6354 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6355 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6356}
6357
6358template<class T1,class C1>
6359inline typename MakeReturn<BinaryNode<OpAdd,
6360 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6363operator+(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6364{
6365 typedef BinaryNode<OpAdd,
6366 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6370 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6371 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6372}
6373
6374template<class T1,class C1>
6375inline typename MakeReturn<BinaryNode<OpSubtract,
6376 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6379operator-(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6380{
6381 typedef BinaryNode<OpSubtract,
6382 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6386 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6387 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6388}
6389
6390template<class T1,class C1>
6391inline typename MakeReturn<BinaryNode<OpMultiply,
6392 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6395operator*(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6396{
6397 typedef BinaryNode<OpMultiply,
6398 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6402 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6403 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6404}
6405
6406template<class T1,class C1>
6407inline typename MakeReturn<BinaryNode<OpDivide,
6408 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6411operator/(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6412{
6413 typedef BinaryNode<OpDivide,
6414 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6418 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6419 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6420}
6421
6422template<class T1,class C1>
6423inline typename MakeReturn<BinaryNode<OpMod,
6424 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6427operator%(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6428{
6429 typedef BinaryNode<OpMod,
6430 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6434 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6435 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6436}
6437
6438template<class T1,class C1>
6439inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
6440 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6443operator&(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6444{
6445 typedef BinaryNode<OpBitwiseAnd,
6446 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6450 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6451 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6452}
6453
6454template<class T1,class C1>
6455inline typename MakeReturn<BinaryNode<OpBitwiseOr,
6456 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6459operator|(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6460{
6461 typedef BinaryNode<OpBitwiseOr,
6462 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6466 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6467 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6468}
6469
6470template<class T1,class C1>
6471inline typename MakeReturn<BinaryNode<OpBitwiseXor,
6472 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6475operator^(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6476{
6477 typedef BinaryNode<OpBitwiseXor,
6478 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6482 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6483 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6484}
6485
6486template<class T1,class C1>
6487inline typename MakeReturn<BinaryNode<FnLdexp,
6488 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6491ldexp(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6492{
6493 typedef BinaryNode<FnLdexp,
6494 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6498 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6499 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6500}
6501
6502template<class T1,class C1>
6503inline typename MakeReturn<BinaryNode<FnPow,
6504 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6507pow(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6508{
6509 typedef BinaryNode<FnPow,
6510 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6514 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6515 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6516}
6517
6518template<class T1,class C1>
6519inline typename MakeReturn<BinaryNode<FnFmod,
6520 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6523fmod(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6524{
6525 typedef BinaryNode<FnFmod,
6526 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6530 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6531 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6532}
6533
6534template<class T1,class C1>
6535inline typename MakeReturn<BinaryNode<FnArcTan2,
6536 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6539atan2(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6540{
6541 typedef BinaryNode<FnArcTan2,
6542 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6546 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6547 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6548}
6549
6550template<class T1,class C1>
6551inline typename MakeReturn<BinaryNode<OpLT,
6552 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6555operator<(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6556{
6557 typedef BinaryNode<OpLT,
6558 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6562 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6563 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6564}
6565
6566template<class T1,class C1>
6567inline typename MakeReturn<BinaryNode<OpLE,
6568 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6571operator<=(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6572{
6573 typedef BinaryNode<OpLE,
6574 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6578 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6579 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6580}
6581
6582template<class T1,class C1>
6583inline typename MakeReturn<BinaryNode<OpGT,
6584 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6587operator>(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6588{
6589 typedef BinaryNode<OpGT,
6590 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6594 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6595 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6596}
6597
6598template<class T1,class C1>
6599inline typename MakeReturn<BinaryNode<OpGE,
6600 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6603operator>=(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6604{
6605 typedef BinaryNode<OpGE,
6606 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6610 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6611 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6612}
6613
6614template<class T1,class C1>
6615inline typename MakeReturn<BinaryNode<OpEQ,
6616 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6619operator==(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6620{
6621 typedef BinaryNode<OpEQ,
6622 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6626 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6627 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6628}
6629
6630template<class T1,class C1>
6631inline typename MakeReturn<BinaryNode<OpNE,
6632 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6635operator!=(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6636{
6637 typedef BinaryNode<OpNE,
6638 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6642 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6643 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6644}
6645
6646template<class T1,class C1>
6647inline typename MakeReturn<BinaryNode<OpAnd,
6648 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6651operator&&(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6652{
6653 typedef BinaryNode<OpAnd,
6654 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6658 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6659 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6660}
6661
6662template<class T1,class C1>
6663inline typename MakeReturn<BinaryNode<OpOr,
6664 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6667operator||(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6668{
6669 typedef BinaryNode<OpOr,
6670 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6674 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6675 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6676}
6677
6678template<class T1,class C1>
6679inline typename MakeReturn<BinaryNode<OpLeftShift,
6680 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6683operator<<(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6684{
6685 typedef BinaryNode<OpLeftShift,
6686 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6690 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6691 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6692}
6693
6694template<class T1,class C1>
6695inline typename MakeReturn<BinaryNode<OpRightShift,
6696 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6699operator>>(const QDPExpr<T1,C1> & l,const typename WordType<C1>::Type_t & r)
6700{
6701 typedef BinaryNode<OpRightShift,
6702 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
6706 CreateLeaf<QDPExpr<T1,C1> >::make(l),
6707 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(r))));
6708}
6709
6710template<class T2,class C2>
6711inline typename MakeReturn<BinaryNode<FnCmplx,
6713 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6715cmplx(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6716{
6717 typedef BinaryNode<FnCmplx,
6719 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6722 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6723 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6724}
6725
6726template<class T2,class C2>
6727inline typename MakeReturn<BinaryNode<FnOuterProduct,
6729 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6731outerProduct(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6732{
6733 typedef BinaryNode<FnOuterProduct,
6735 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6738 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6739 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6740}
6741
6742template<class T2,class C2>
6745 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6747colorVectorContract(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6748{
6751 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6754 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6755 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6756}
6757
6758template<class T2,class C2>
6761 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6763colorCrossProduct(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6764{
6767 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6770 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6771 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6772}
6773
6774template<class T2,class C2>
6777 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6779localInnerProduct(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6780{
6783 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6786 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6787 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6788}
6789
6790template<class T2,class C2>
6793 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6795localInnerProductReal(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6796{
6799 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6802 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6803 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6804}
6805
6806template<class T2,class C2>
6809 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6811localColorInnerProduct(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6812{
6815 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6818 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6819 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6820}
6821
6822template<class T2,class C2>
6825 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6827quarkContract13(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6828{
6831 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6834 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6835 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6836}
6837
6838template<class T2,class C2>
6841 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6843quarkContract14(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6844{
6847 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6850 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6851 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6852}
6853
6854template<class T2,class C2>
6857 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6859quarkContract23(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6860{
6863 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6866 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6867 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6868}
6869
6870template<class T2,class C2>
6873 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6875quarkContract24(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6876{
6879 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6882 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6883 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6884}
6885
6886template<class T2,class C2>
6889 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6891quarkContract12(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6892{
6895 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6898 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6899 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6900}
6901
6902template<class T2,class C2>
6905 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6907quarkContract34(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6908{
6911 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6914 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6915 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6916}
6917
6918template<class T2,class C2>
6919inline typename MakeReturn<BinaryNode<OpAdd,
6921 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6923operator+(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6924{
6925 typedef BinaryNode<OpAdd,
6927 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6930 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6931 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6932}
6933
6934template<class T2,class C2>
6935inline typename MakeReturn<BinaryNode<OpSubtract,
6937 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6939operator-(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6940{
6941 typedef BinaryNode<OpSubtract,
6943 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6946 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6947 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6948}
6949
6950template<class T2,class C2>
6951inline typename MakeReturn<BinaryNode<OpMultiply,
6953 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6955operator*(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6956{
6957 typedef BinaryNode<OpMultiply,
6959 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6962 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6963 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6964}
6965
6966template<class T2,class C2>
6967inline typename MakeReturn<BinaryNode<OpDivide,
6969 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6971operator/(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6972{
6973 typedef BinaryNode<OpDivide,
6975 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6978 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6979 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6980}
6981
6982template<class T2,class C2>
6983inline typename MakeReturn<BinaryNode<OpMod,
6985 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
6987operator%(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
6988{
6989 typedef BinaryNode<OpMod,
6991 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
6994 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
6995 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
6996}
6997
6998template<class T2,class C2>
6999inline typename MakeReturn<BinaryNode<OpBitwiseAnd,
7001 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7003operator&(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7004{
7005 typedef BinaryNode<OpBitwiseAnd,
7007 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7010 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7011 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7012}
7013
7014template<class T2,class C2>
7015inline typename MakeReturn<BinaryNode<OpBitwiseOr,
7017 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7019operator|(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7020{
7021 typedef BinaryNode<OpBitwiseOr,
7023 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7026 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7027 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7028}
7029
7030template<class T2,class C2>
7031inline typename MakeReturn<BinaryNode<OpBitwiseXor,
7033 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7035operator^(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7036{
7037 typedef BinaryNode<OpBitwiseXor,
7039 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7042 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7043 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7044}
7045
7046template<class T2,class C2>
7047inline typename MakeReturn<BinaryNode<FnLdexp,
7049 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7051ldexp(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7052{
7053 typedef BinaryNode<FnLdexp,
7055 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7058 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7059 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7060}
7061
7062template<class T2,class C2>
7063inline typename MakeReturn<BinaryNode<FnPow,
7065 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7067pow(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7068{
7069 typedef BinaryNode<FnPow,
7071 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7074 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7075 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7076}
7077
7078template<class T2,class C2>
7079inline typename MakeReturn<BinaryNode<FnFmod,
7081 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7083fmod(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7084{
7085 typedef BinaryNode<FnFmod,
7087 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7090 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7091 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7092}
7093
7094template<class T2,class C2>
7095inline typename MakeReturn<BinaryNode<FnArcTan2,
7097 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7099atan2(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7100{
7101 typedef BinaryNode<FnArcTan2,
7103 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7106 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7107 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7108}
7109
7110template<class T2,class C2>
7111inline typename MakeReturn<BinaryNode<OpLT,
7113 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7115operator<(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7116{
7117 typedef BinaryNode<OpLT,
7119 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7122 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7123 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7124}
7125
7126template<class T2,class C2>
7127inline typename MakeReturn<BinaryNode<OpLE,
7129 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7131operator<=(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7132{
7133 typedef BinaryNode<OpLE,
7135 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7138 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7139 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7140}
7141
7142template<class T2,class C2>
7143inline typename MakeReturn<BinaryNode<OpGT,
7145 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7147operator>(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7148{
7149 typedef BinaryNode<OpGT,
7151 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7154 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7155 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7156}
7157
7158template<class T2,class C2>
7159inline typename MakeReturn<BinaryNode<OpGE,
7161 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7163operator>=(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7164{
7165 typedef BinaryNode<OpGE,
7167 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7170 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7171 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7172}
7173
7174template<class T2,class C2>
7175inline typename MakeReturn<BinaryNode<OpEQ,
7177 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7179operator==(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7180{
7181 typedef BinaryNode<OpEQ,
7183 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7186 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7187 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7188}
7189
7190template<class T2,class C2>
7191inline typename MakeReturn<BinaryNode<OpNE,
7193 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7195operator!=(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7196{
7197 typedef BinaryNode<OpNE,
7199 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7202 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7203 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7204}
7205
7206template<class T2,class C2>
7207inline typename MakeReturn<BinaryNode<OpAnd,
7209 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7211operator&&(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7212{
7213 typedef BinaryNode<OpAnd,
7215 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7218 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7219 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7220}
7221
7222template<class T2,class C2>
7223inline typename MakeReturn<BinaryNode<OpOr,
7225 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7227operator||(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7228{
7229 typedef BinaryNode<OpOr,
7231 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7234 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7235 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7236}
7237
7238template<class T1,class C1,class T2,class C2>
7239inline typename MakeReturn<TrinaryNode<FnColorContract,
7240 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7241 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7244colorContract(const QDPExpr<T1,C1> & a,const QDPType<T2,C2> & b,const typename WordType<C1>::Type_t & c)
7245{
7247 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7248 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7252 CreateLeaf<QDPExpr<T1,C1> >::make(a),
7253 CreateLeaf<QDPType<T2,C2> >::make(b),
7254 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(c))));
7255}
7256
7257template<class T1,class C1,class T2,class C2>
7258inline typename MakeReturn<TrinaryNode<FnWhere,
7259 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7260 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7263where(const QDPExpr<T1,C1> & a,const QDPType<T2,C2> & b,const typename WordType<C1>::Type_t & c)
7264{
7265 typedef TrinaryNode<FnWhere,
7266 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7267 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7271 CreateLeaf<QDPExpr<T1,C1> >::make(a),
7272 CreateLeaf<QDPType<T2,C2> >::make(b),
7273 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(c))));
7274}
7275
7276template<class T1,class C1,class T3,class C3>
7277inline typename MakeReturn<TrinaryNode<FnColorContract,
7278 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7280 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
7282colorContract(const QDPExpr<T1,C1> & a,const typename WordType<C1>::Type_t & b,const QDPType<T3,C3> & c)
7283{
7285 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7287 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
7290 CreateLeaf<QDPExpr<T1,C1> >::make(a),
7291 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(b)),
7292 CreateLeaf<QDPType<T3,C3> >::make(c)));
7293}
7294
7295template<class T1,class C1,class T3,class C3>
7296inline typename MakeReturn<TrinaryNode<FnWhere,
7297 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7299 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
7301where(const QDPExpr<T1,C1> & a,const typename WordType<C1>::Type_t & b,const QDPType<T3,C3> & c)
7302{
7303 typedef TrinaryNode<FnWhere,
7304 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7306 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
7309 CreateLeaf<QDPExpr<T1,C1> >::make(a),
7310 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(b)),
7311 CreateLeaf<QDPType<T3,C3> >::make(c)));
7312}
7313
7314template<class T1,class C1>
7315inline typename MakeReturn<TrinaryNode<FnColorContract,
7316 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7320colorContract(const QDPExpr<T1,C1> & a,const typename WordType<C1>::Type_t & b,const typename WordType<C1>::Type_t & c)
7321{
7323 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7326 typedef typename TrinaryReturn<C1,typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t,typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t,FnColorContract>::Type_t Container_t;
7328 CreateLeaf<QDPExpr<T1,C1> >::make(a),
7329 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(b)),
7330 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(c))));
7331}
7332
7333template<class T1,class C1>
7334inline typename MakeReturn<TrinaryNode<FnWhere,
7335 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7339where(const QDPExpr<T1,C1> & a,const typename WordType<C1>::Type_t & b,const typename WordType<C1>::Type_t & c)
7340{
7341 typedef TrinaryNode<FnWhere,
7342 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7345 typedef typename TrinaryReturn<C1,typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t,typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t,FnWhere>::Type_t Container_t;
7347 CreateLeaf<QDPExpr<T1,C1> >::make(a),
7348 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(b)),
7349 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(c))));
7350}
7351
7352template<class T1,class C1,class T2,class C2>
7353inline typename MakeReturn<TrinaryNode<FnColorContract,
7354 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7355 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7358colorContract(const QDPType<T1,C1> & a,const QDPExpr<T2,C2> & b,const typename WordType<C1>::Type_t & c)
7359{
7361 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7362 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7366 CreateLeaf<QDPType<T1,C1> >::make(a),
7367 CreateLeaf<QDPExpr<T2,C2> >::make(b),
7368 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(c))));
7369}
7370
7371template<class T1,class C1,class T2,class C2>
7372inline typename MakeReturn<TrinaryNode<FnWhere,
7373 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7374 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7377where(const QDPType<T1,C1> & a,const QDPExpr<T2,C2> & b,const typename WordType<C1>::Type_t & c)
7378{
7379 typedef TrinaryNode<FnWhere,
7380 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7381 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7385 CreateLeaf<QDPType<T1,C1> >::make(a),
7386 CreateLeaf<QDPExpr<T2,C2> >::make(b),
7387 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(c))));
7388}
7389
7390template<class T1,class C1,class T3,class C3>
7391inline typename MakeReturn<TrinaryNode<FnColorContract,
7392 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7394 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
7396colorContract(const QDPType<T1,C1> & a,const typename WordType<C1>::Type_t & b,const QDPExpr<T3,C3> & c)
7397{
7399 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7401 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
7404 CreateLeaf<QDPType<T1,C1> >::make(a),
7405 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(b)),
7406 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
7407}
7408
7409template<class T1,class C1,class T3,class C3>
7410inline typename MakeReturn<TrinaryNode<FnWhere,
7411 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7413 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
7415where(const QDPType<T1,C1> & a,const typename WordType<C1>::Type_t & b,const QDPExpr<T3,C3> & c)
7416{
7417 typedef TrinaryNode<FnWhere,
7418 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7420 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
7423 CreateLeaf<QDPType<T1,C1> >::make(a),
7424 CreateLeaf<typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C1>::Type_t>::Type_t(b)),
7425 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
7426}
7427
7428template<class T2,class C2,class T3,class C3>
7429inline typename MakeReturn<TrinaryNode<FnColorContract,
7431 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7432 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
7434colorContract(const typename WordType<C2>::Type_t & a,const QDPExpr<T2,C2> & b,const QDPType<T3,C3> & c)
7435{
7438 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7439 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
7442 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(a)),
7443 CreateLeaf<QDPExpr<T2,C2> >::make(b),
7444 CreateLeaf<QDPType<T3,C3> >::make(c)));
7445}
7446
7447template<class T2,class C2,class T3,class C3>
7448inline typename MakeReturn<TrinaryNode<FnWhere,
7450 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7451 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
7453where(const typename WordType<C2>::Type_t & a,const QDPExpr<T2,C2> & b,const QDPType<T3,C3> & c)
7454{
7455 typedef TrinaryNode<FnWhere,
7457 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7458 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
7461 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(a)),
7462 CreateLeaf<QDPExpr<T2,C2> >::make(b),
7463 CreateLeaf<QDPType<T3,C3> >::make(c)));
7464}
7465
7466template<class T2,class C2,class T3,class C3>
7467inline typename MakeReturn<TrinaryNode<FnColorContract,
7469 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7470 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
7472colorContract(const typename WordType<C2>::Type_t & a,const QDPType<T2,C2> & b,const QDPExpr<T3,C3> & c)
7473{
7476 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7477 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
7480 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(a)),
7481 CreateLeaf<QDPType<T2,C2> >::make(b),
7482 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
7483}
7484
7485template<class T2,class C2,class T3,class C3>
7486inline typename MakeReturn<TrinaryNode<FnWhere,
7488 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7489 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
7491where(const typename WordType<C2>::Type_t & a,const QDPType<T2,C2> & b,const QDPExpr<T3,C3> & c)
7492{
7493 typedef TrinaryNode<FnWhere,
7495 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7496 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
7499 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(a)),
7500 CreateLeaf<QDPType<T2,C2> >::make(b),
7501 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
7502}
7503
7504template<class T2,class C2,class T3,class C3>
7505inline typename MakeReturn<TrinaryNode<FnColorContract,
7507 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7508 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
7510colorContract(const typename WordType<C2>::Type_t & a,const QDPExpr<T2,C2> & b,const QDPExpr<T3,C3> & c)
7511{
7514 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7515 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
7518 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(a)),
7519 CreateLeaf<QDPExpr<T2,C2> >::make(b),
7520 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
7521}
7522
7523template<class T2,class C2,class T3,class C3>
7524inline typename MakeReturn<TrinaryNode<FnWhere,
7526 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7527 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
7529where(const typename WordType<C2>::Type_t & a,const QDPExpr<T2,C2> & b,const QDPExpr<T3,C3> & c)
7530{
7531 typedef TrinaryNode<FnWhere,
7533 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7534 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
7537 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(a)),
7538 CreateLeaf<QDPExpr<T2,C2> >::make(b),
7539 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
7540}
7541
7542template<class T2,class C2>
7543inline typename MakeReturn<TrinaryNode<FnColorContract,
7545 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7548colorContract(const typename WordType<C2>::Type_t & a,const QDPExpr<T2,C2> & b,const typename WordType<C2>::Type_t & c)
7549{
7552 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7554 typedef typename TrinaryReturn<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t,C2,typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t,FnColorContract>::Type_t Container_t;
7556 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(a)),
7557 CreateLeaf<QDPExpr<T2,C2> >::make(b),
7558 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(c))));
7559}
7560
7561template<class T2,class C2>
7562inline typename MakeReturn<TrinaryNode<FnWhere,
7564 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7566 typename TrinaryReturn<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t,C2,typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t,FnWhere>::Type_t >::Expression_t
7567where(const typename WordType<C2>::Type_t & a,const QDPExpr<T2,C2> & b,const typename WordType<C2>::Type_t & c)
7568{
7569 typedef TrinaryNode<FnWhere,
7571 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7573 typedef typename TrinaryReturn<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t,C2,typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t,FnWhere>::Type_t Container_t;
7575 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(a)),
7576 CreateLeaf<QDPExpr<T2,C2> >::make(b),
7577 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(c))));
7578}
7579
7580template<class T3,class C3>
7581inline typename MakeReturn<TrinaryNode<FnColorContract,
7584 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
7586colorContract(const typename WordType<C3>::Type_t & a,const typename WordType<C3>::Type_t & b,const QDPExpr<T3,C3> & c)
7587{
7591 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
7592 typedef typename TrinaryReturn<typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t,typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t,C3,FnColorContract>::Type_t Container_t;
7594 CreateLeaf<typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t(a)),
7595 CreateLeaf<typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t(b)),
7596 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
7597}
7598
7599template<class T3,class C3>
7600inline typename MakeReturn<TrinaryNode<FnWhere,
7603 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
7604 typename TrinaryReturn<typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t,typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t,C3,FnWhere>::Type_t >::Expression_t
7605where(const typename WordType<C3>::Type_t & a,const typename WordType<C3>::Type_t & b,const QDPExpr<T3,C3> & c)
7606{
7607 typedef TrinaryNode<FnWhere,
7610 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
7611 typedef typename TrinaryReturn<typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t,typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t,C3,FnWhere>::Type_t Container_t;
7613 CreateLeaf<typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t(a)),
7614 CreateLeaf<typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C3>::Type_t>::Type_t(b)),
7615 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
7616}
7617#ifdef PETE_ALLOW_SCALAR_SHIFT
7618
7619template<class T2,class C2>
7620inline typename MakeReturn<BinaryNode<OpLeftShift,
7622 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7624operator<<(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7625{
7626 typedef BinaryNode<OpLeftShift,
7628 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7631 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7632 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7633}
7634
7635template<class T2,class C2>
7636inline typename MakeReturn<BinaryNode<OpRightShift,
7638 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t>,
7640operator>>(const typename WordType<C2>::Type_t & l,const QDPExpr<T2,C2> & r)
7641{
7642 typedef BinaryNode<OpRightShift,
7644 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t> Tree_t;
7647 CreateLeaf<typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t >::make(typename SimpleScalar<typename WordType<C2>::Type_t>::Type_t(l)),
7648 CreateLeaf<QDPExpr<T2,C2> >::make(r)));
7649}
7650#endif // PETE_ALLOW_SCALAR_SHIFT
7651
7652template<class T1,class C1,class T2,class C2,class T3,class C3>
7653inline typename MakeReturn<TrinaryNode<FnColorContract,
7654 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7655 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7656 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
7658colorContract(const QDPExpr<T1,C1> & a,const QDPType<T2,C2> & b,const QDPType<T3,C3> & c)
7659{
7661 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7662 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7663 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
7664 typedef typename TrinaryReturn<C1,C2,C3,FnColorContract>::Type_t Container_t;
7666 CreateLeaf<QDPExpr<T1,C1> >::make(a),
7667 CreateLeaf<QDPType<T2,C2> >::make(b),
7668 CreateLeaf<QDPType<T3,C3> >::make(c)));
7669}
7670
7671template<class T1,class C1,class T2,class C2,class T3,class C3>
7672inline typename MakeReturn<TrinaryNode<FnWhere,
7673 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7674 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7675 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
7677where(const QDPExpr<T1,C1> & a,const QDPType<T2,C2> & b,const QDPType<T3,C3> & c)
7678{
7679 typedef TrinaryNode<FnWhere,
7680 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7681 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7682 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
7683 typedef typename TrinaryReturn<C1,C2,C3,FnWhere>::Type_t Container_t;
7685 CreateLeaf<QDPExpr<T1,C1> >::make(a),
7686 CreateLeaf<QDPType<T2,C2> >::make(b),
7687 CreateLeaf<QDPType<T3,C3> >::make(c)));
7688}
7689
7690template<class T1,class C1,class T2,class C2,class T3,class C3>
7691inline typename MakeReturn<TrinaryNode<FnColorContract,
7692 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7693 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7694 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
7696colorContract(const QDPType<T1,C1> & a,const QDPExpr<T2,C2> & b,const QDPType<T3,C3> & c)
7697{
7699 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7700 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7701 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
7702 typedef typename TrinaryReturn<C1,C2,C3,FnColorContract>::Type_t Container_t;
7704 CreateLeaf<QDPType<T1,C1> >::make(a),
7705 CreateLeaf<QDPExpr<T2,C2> >::make(b),
7706 CreateLeaf<QDPType<T3,C3> >::make(c)));
7707}
7708
7709template<class T1,class C1,class T2,class C2,class T3,class C3>
7710inline typename MakeReturn<TrinaryNode<FnWhere,
7711 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7712 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7713 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
7715where(const QDPType<T1,C1> & a,const QDPExpr<T2,C2> & b,const QDPType<T3,C3> & c)
7716{
7717 typedef TrinaryNode<FnWhere,
7718 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7719 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7720 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
7721 typedef typename TrinaryReturn<C1,C2,C3,FnWhere>::Type_t Container_t;
7723 CreateLeaf<QDPType<T1,C1> >::make(a),
7724 CreateLeaf<QDPExpr<T2,C2> >::make(b),
7725 CreateLeaf<QDPType<T3,C3> >::make(c)));
7726}
7727
7728template<class T1,class C1,class T2,class C2,class T3,class C3>
7729inline typename MakeReturn<TrinaryNode<FnColorContract,
7730 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7731 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7732 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
7734colorContract(const QDPType<T1,C1> & a,const QDPType<T2,C2> & b,const QDPExpr<T3,C3> & c)
7735{
7737 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7738 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7739 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
7740 typedef typename TrinaryReturn<C1,C2,C3,FnColorContract>::Type_t Container_t;
7742 CreateLeaf<QDPType<T1,C1> >::make(a),
7743 CreateLeaf<QDPType<T2,C2> >::make(b),
7744 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
7745}
7746
7747template<class T1,class C1,class T2,class C2,class T3,class C3>
7748inline typename MakeReturn<TrinaryNode<FnWhere,
7749 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7750 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7751 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
7753where(const QDPType<T1,C1> & a,const QDPType<T2,C2> & b,const QDPExpr<T3,C3> & c)
7754{
7755 typedef TrinaryNode<FnWhere,
7756 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7757 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7758 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
7759 typedef typename TrinaryReturn<C1,C2,C3,FnWhere>::Type_t Container_t;
7761 CreateLeaf<QDPType<T1,C1> >::make(a),
7762 CreateLeaf<QDPType<T2,C2> >::make(b),
7763 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
7764}
7765
7766template<class T1,class C1,class T2,class C2,class T3,class C3>
7767inline typename MakeReturn<TrinaryNode<FnColorContract,
7768 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7769 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7770 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
7772colorContract(const QDPExpr<T1,C1> & a,const QDPExpr<T2,C2> & b,const QDPType<T3,C3> & c)
7773{
7775 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7776 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7777 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
7778 typedef typename TrinaryReturn<C1,C2,C3,FnColorContract>::Type_t Container_t;
7780 CreateLeaf<QDPExpr<T1,C1> >::make(a),
7781 CreateLeaf<QDPExpr<T2,C2> >::make(b),
7782 CreateLeaf<QDPType<T3,C3> >::make(c)));
7783}
7784
7785template<class T1,class C1,class T2,class C2,class T3,class C3>
7786inline typename MakeReturn<TrinaryNode<FnWhere,
7787 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7788 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7789 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t>,
7791where(const QDPExpr<T1,C1> & a,const QDPExpr<T2,C2> & b,const QDPType<T3,C3> & c)
7792{
7793 typedef TrinaryNode<FnWhere,
7794 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7795 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7796 typename CreateLeaf<QDPType<T3,C3> >::Leaf_t> Tree_t;
7797 typedef typename TrinaryReturn<C1,C2,C3,FnWhere>::Type_t Container_t;
7799 CreateLeaf<QDPExpr<T1,C1> >::make(a),
7800 CreateLeaf<QDPExpr<T2,C2> >::make(b),
7801 CreateLeaf<QDPType<T3,C3> >::make(c)));
7802}
7803
7804template<class T1,class C1,class T2,class C2,class T3,class C3>
7805inline typename MakeReturn<TrinaryNode<FnColorContract,
7806 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7807 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7808 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
7810colorContract(const QDPType<T1,C1> & a,const QDPExpr<T2,C2> & b,const QDPExpr<T3,C3> & c)
7811{
7813 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7814 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7815 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
7816 typedef typename TrinaryReturn<C1,C2,C3,FnColorContract>::Type_t Container_t;
7818 CreateLeaf<QDPType<T1,C1> >::make(a),
7819 CreateLeaf<QDPExpr<T2,C2> >::make(b),
7820 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
7821}
7822
7823template<class T1,class C1,class T2,class C2,class T3,class C3>
7824inline typename MakeReturn<TrinaryNode<FnWhere,
7825 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7826 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7827 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
7829where(const QDPType<T1,C1> & a,const QDPExpr<T2,C2> & b,const QDPExpr<T3,C3> & c)
7830{
7831 typedef TrinaryNode<FnWhere,
7832 typename CreateLeaf<QDPType<T1,C1> >::Leaf_t,
7833 typename CreateLeaf<QDPExpr<T2,C2> >::Leaf_t,
7834 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
7835 typedef typename TrinaryReturn<C1,C2,C3,FnWhere>::Type_t Container_t;
7837 CreateLeaf<QDPType<T1,C1> >::make(a),
7838 CreateLeaf<QDPExpr<T2,C2> >::make(b),
7839 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
7840}
7841
7842template<class T1,class C1,class T2,class C2,class T3,class C3>
7843inline typename MakeReturn<TrinaryNode<FnColorContract,
7844 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7845 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7846 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
7848colorContract(const QDPExpr<T1,C1> & a,const QDPType<T2,C2> & b,const QDPExpr<T3,C3> & c)
7849{
7851 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7852 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7853 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
7854 typedef typename TrinaryReturn<C1,C2,C3,FnColorContract>::Type_t Container_t;
7856 CreateLeaf<QDPExpr<T1,C1> >::make(a),
7857 CreateLeaf<QDPType<T2,C2> >::make(b),
7858 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
7859}
7860
7861template<class T1,class C1,class T2,class C2,class T3,class C3>
7862inline typename MakeReturn<TrinaryNode<FnWhere,
7863 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7864 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7865 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t>,
7867where(const QDPExpr<T1,C1> & a,const QDPType<T2,C2> & b,const QDPExpr<T3,C3> & c)
7868{
7869 typedef TrinaryNode<FnWhere,
7870 typename CreateLeaf<QDPExpr<T1,C1> >::Leaf_t,
7871 typename CreateLeaf<QDPType<T2,C2> >::Leaf_t,
7872 typename CreateLeaf<QDPExpr<T3,C3> >::Leaf_t> Tree_t;
7873 typedef typename TrinaryReturn<C1,C2,C3,FnWhere>::Type_t Container_t;
7875 CreateLeaf<QDPExpr<T1,C1> >::make(a),
7876 CreateLeaf<QDPType<T2,C2> >::make(b),
7877 CreateLeaf<QDPExpr<T3,C3> >::make(c)));
7878}
7879#endif // PETE_EXPRESSION_OPERATORS
7880
7881#endif // QDPOPS_H
7882
#define PETE_EMPTY_CONSTRUCTORS(CLASS)
Definition PETE.h:58
MakeReturn< UnaryNode< FnRealTrace, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnRealTrace >::Type_t >::Expression_t realTrace(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnFloor, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnFloor >::Type_t >::Expression_t floor(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< FnQuarkContract24, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnQuarkContract24 >::Type_t >::Expression_t quarkContract24(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnTransposeSpin, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTransposeSpin >::Type_t >::Expression_t transposeSpin(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< OpIdentity, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, OpIdentity >::Type_t >::Expression_t PETE_identity(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< OpBitwiseAnd, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpBitwiseAnd >::Type_t >::Expression_t operator&(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnFabs, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnFabs >::Type_t >::Expression_t fabs(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< FnQuarkContract12, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnQuarkContract12 >::Type_t >::Expression_t quarkContract12(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< BinaryNode< FnLdexp, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnLdexp >::Type_t >::Expression_t ldexp(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnSpinReconstructDir2Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir2Minus >::Type_t >::Expression_t spinReconstructDir2Minus(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< OpBitwiseOr, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpBitwiseOr >::Type_t >::Expression_t operator|(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnSpinReconstructDir3Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir3Plus >::Type_t >::Expression_t spinReconstructDir3Plus(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnTrace, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTrace >::Type_t >::Expression_t trace(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< FnLocalInnerProductReal, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnLocalInnerProductReal >::Type_t >::Expression_t localInnerProductReal(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< BinaryNode< FnColorCrossProduct, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnColorCrossProduct >::Type_t >::Expression_t colorCrossProduct(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< BinaryNode< FnFmod, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnFmod >::Type_t >::Expression_t fmod(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< BinaryNode< FnLocalColorInnerProduct, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnLocalColorInnerProduct >::Type_t >::Expression_t localColorInnerProduct(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< OpNot, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, OpNot >::Type_t >::Expression_t operator!(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnSpinProjectDir3Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir3Minus >::Type_t >::Expression_t spinProjectDir3Minus(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< FnPow, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnPow >::Type_t >::Expression_t pow(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnSpinReconstructDir0Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir0Minus >::Type_t >::Expression_t spinReconstructDir0Minus(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnChiralProjectPlus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnChiralProjectPlus >::Type_t >::Expression_t chiralProjectPlus(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnTraceColor, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTraceColor >::Type_t >::Expression_t traceColor(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< OpDivide, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpDivide >::Type_t >::Expression_t operator/(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnSpinReconstructDir3Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir3Minus >::Type_t >::Expression_t spinReconstructDir3Minus(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnSeedToFloat, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSeedToFloat >::Type_t >::Expression_t seedToFloat(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnSpinProjectDir2Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir2Minus >::Type_t >::Expression_t spinProjectDir2Minus(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnTranspose, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTranspose >::Type_t >::Expression_t transpose(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< OpBitwiseXor, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpBitwiseXor >::Type_t >::Expression_t operator^(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< BinaryNode< OpMultiply, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpMultiply >::Type_t >::Expression_t operator*(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnSpinProjectDir2Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir2Plus >::Type_t >::Expression_t spinProjectDir2Plus(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnTan, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTan >::Type_t >::Expression_t tan(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnHypTan, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnHypTan >::Type_t >::Expression_t tanh(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< FnCmplx, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnCmplx >::Type_t >::Expression_t cmplx(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< BinaryNode< OpNE, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpNE >::Type_t >::Expression_t operator!=(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnTimesMinusI, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTimesMinusI >::Type_t >::Expression_t timesMinusI(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnArcSin, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnArcSin >::Type_t >::Expression_t asin(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnSpinReconstructDir1Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir1Minus >::Type_t >::Expression_t spinReconstructDir1Minus(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnExp, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnExp >::Type_t >::Expression_t exp(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< OpLE, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpLE >::Type_t >::Expression_t operator<=(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnLog, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnLog >::Type_t >::Expression_t log(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnCos, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnCos >::Type_t >::Expression_t cos(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnSpinProjectDir0Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir0Plus >::Type_t >::Expression_t spinProjectDir0Plus(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnImagTrace, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnImagTrace >::Type_t >::Expression_t imagTrace(const QDPExpr< T1, C1 > &l)
MakeReturn< TrinaryNode< FnWhere, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPType< T2, C2 > >::Leaf_t, typenameCreateLeaf< typenameSimpleScalar< typenameWordType< C1 >::Type_t >::Type_t >::Leaf_t >, typenameTrinaryReturn< C1, C2, typenameSimpleScalar< typenameWordType< C1 >::Type_t >::Type_t, FnWhere >::Type_t >::Expression_t where(const QDPType< T1, C1 > &a, const QDPType< T2, C2 > &b, const typename WordType< C1 >::Type_t &c)
MakeReturn< UnaryNode< FnTransposeColor, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTransposeColor >::Type_t >::Expression_t transposeColor(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< OpOr, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpOr >::Type_t >::Expression_t operator||(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< BinaryNode< FnQuarkContract34, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnQuarkContract34 >::Type_t >::Expression_t quarkContract34(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnHypCos, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnHypCos >::Type_t >::Expression_t cosh(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnLocalNorm2, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnLocalNorm2 >::Type_t >::Expression_t localNorm2(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< OpAnd, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpAnd >::Type_t >::Expression_t operator&&(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnArcTan, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnArcTan >::Type_t >::Expression_t atan(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< OpGE, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpGE >::Type_t >::Expression_t operator>=(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< BinaryNode< FnOuterProduct, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnOuterProduct >::Type_t >::Expression_t outerProduct(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< BinaryNode< OpLT, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpLT >::Type_t >::Expression_t operator<(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< BinaryNode< FnLocalInnerProduct, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnLocalInnerProduct >::Type_t >::Expression_t localInnerProduct(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnTimesI, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTimesI >::Type_t >::Expression_t timesI(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnTraceSpin, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnTraceSpin >::Type_t >::Expression_t traceSpin(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnHypSin, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnHypSin >::Type_t >::Expression_t sinh(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnSpinReconstructDir2Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir2Plus >::Type_t >::Expression_t spinReconstructDir2Plus(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnChiralProjectMinus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnChiralProjectMinus >::Type_t >::Expression_t chiralProjectMinus(const QDPExpr< T1, C1 > &l)
MakeReturn< TrinaryNode< FnColorContract, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPType< T2, C2 > >::Leaf_t, typenameCreateLeaf< typenameSimpleScalar< typenameWordType< C1 >::Type_t >::Type_t >::Leaf_t >, typenameTrinaryReturn< C1, C2, typenameSimpleScalar< typenameWordType< C1 >::Type_t >::Type_t, FnColorContract >::Type_t >::Expression_t colorContract(const QDPType< T1, C1 > &a, const QDPType< T2, C2 > &b, const typename WordType< C1 >::Type_t &c)
MakeReturn< UnaryNode< FnSqrt, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSqrt >::Type_t >::Expression_t sqrt(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnConjugate, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnConjugate >::Type_t >::Expression_t conj(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< OpEQ, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpEQ >::Type_t >::Expression_t operator==(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnCeil, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnCeil >::Type_t >::Expression_t ceil(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnSpinReconstructDir1Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir1Plus >::Type_t >::Expression_t spinReconstructDir1Plus(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnSpinProjectDir1Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir1Minus >::Type_t >::Expression_t spinProjectDir1Minus(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< OpSubtract, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpSubtract >::Type_t >::Expression_t operator-(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< BinaryNode< OpMod, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpMod >::Type_t >::Expression_t operator%(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< BinaryNode< OpLeftShift, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpLeftShift >::Type_t >::Expression_t operator<<(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< BinaryNode< FnQuarkContract23, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnQuarkContract23 >::Type_t >::Expression_t quarkContract23(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnSpinReconstructDir0Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir0Plus >::Type_t >::Expression_t spinReconstructDir0Plus(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< OpRightShift, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpRightShift >::Type_t >::Expression_t operator>>(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< BinaryNode< OpGT, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpGT >::Type_t >::Expression_t operator>(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnSpinProjectDir3Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir3Plus >::Type_t >::Expression_t spinProjectDir3Plus(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnLog10, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnLog10 >::Type_t >::Expression_t log10(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnAdjoint, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnAdjoint >::Type_t >::Expression_t adj(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< FnQuarkContract13, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnQuarkContract13 >::Type_t >::Expression_t quarkContract13(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< OpBitwiseNot, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, OpBitwiseNot >::Type_t >::Expression_t operator~(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnImag, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnImag >::Type_t >::Expression_t imag(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< FnColorVectorContract, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnColorVectorContract >::Type_t >::Expression_t colorVectorContract(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnSpinProjectDir0Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir0Minus >::Type_t >::Expression_t spinProjectDir0Minus(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnArcCos, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnArcCos >::Type_t >::Expression_t acos(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< OpAdd, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpAdd >::Type_t >::Expression_t operator+(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnSpinProjectDir1Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir1Plus >::Type_t >::Expression_t spinProjectDir1Plus(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< FnArcTan2, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnArcTan2 >::Type_t >::Expression_t atan2(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
MakeReturn< UnaryNode< FnSin, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSin >::Type_t >::Expression_t sin(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnReal, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnReal >::Type_t >::Expression_t real(const QDPExpr< T1, C1 > &l)
MakeReturn< BinaryNode< FnQuarkContract14, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, FnQuarkContract14 >::Type_t >::Expression_t quarkContract14(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
Promote< T1, T2 >::Type_t Type_t
UnaryReturn< T, FnAdjoint >::Type_t operator()(const T &a) const
UnaryReturn< T, FnChiralProjectMinus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnChiralProjectPlus >::Type_t operator()(const T &a) const
BinaryReturn< T1, T2, FnCmplx >::Type_t operator()(const T1 &a, const T2 &b) const
TrinaryReturn< T1, T2, T3, FnColorContract >::Type_t operator()(const T1 &a, const T2 &b, const T3 &c) const
BinaryReturn< T1, T2, FnColorCrossProduct >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnColorVectorContract >::Type_t operator()(const T1 &a, const T2 &b) const
UnaryReturn< T, FnConjugate >::Type_t operator()(const T &a) const
UnaryReturn< T, FnImagTrace >::Type_t operator()(const T &a) const
UnaryReturn< T, FnImag >::Type_t operator()(const T &a) const
BinaryReturn< T1, T2, FnLocalColorInnerProduct >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnLocalInnerProductReal >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnLocalInnerProduct >::Type_t operator()(const T1 &a, const T2 &b) const
UnaryReturn< T, FnLocalNorm2 >::Type_t operator()(const T &a) const
BinaryReturn< T1, T2, FnOuterProduct >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnQuarkContract12 >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnQuarkContract13 >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnQuarkContract14 >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnQuarkContract23 >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnQuarkContract24 >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnQuarkContract34 >::Type_t operator()(const T1 &a, const T2 &b) const
UnaryReturn< T, FnRealTrace >::Type_t operator()(const T &a) const
UnaryReturn< T, FnReal >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSeedToFloat >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinProjectDir0Minus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinProjectDir0Plus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinProjectDir1Minus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinProjectDir1Plus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinProjectDir2Minus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinProjectDir2Plus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinProjectDir3Minus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinProjectDir3Plus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinReconstructDir0Minus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinReconstructDir0Plus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinReconstructDir1Minus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinReconstructDir1Plus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinReconstructDir2Minus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinReconstructDir2Plus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinReconstructDir3Minus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnSpinReconstructDir3Plus >::Type_t operator()(const T &a) const
UnaryReturn< T, FnTimesI >::Type_t operator()(const T &a) const
UnaryReturn< T, FnTimesMinusI >::Type_t operator()(const T &a) const
UnaryReturn< T, FnTraceColor >::Type_t operator()(const T &a) const
UnaryReturn< T, FnTraceSpin >::Type_t operator()(const T &a) const
UnaryReturn< T, FnTrace >::Type_t operator()(const T &a) const
UnaryReturn< T, FnTransposeColor >::Type_t operator()(const T &a) const
UnaryReturn< T, FnTransposeSpin >::Type_t operator()(const T &a) const
UnaryReturn< T, FnTranspose >::Type_t operator()(const T &a) const
static Expression_t make(const T &a)
Definition CreateLeaf.h:143
BinaryReturn< T2, T3, Op >::Type_t Type_t