inline T OpGammaTypeMultiply:: operator()(const GammaType<N>& a, const T &b) const { typedef T (*Ptrfunc)(const T&); Ptrfunc s[] = {&Multiply_gamma0_arg<T,N>, &Multiply_gamma1_arg<T,N>, &Multiply_gamma2_arg<T,N>, &Multiply_gamma3_arg<T,N>, &Multiply_gamma4_arg<T,N>, &Multiply_gamma5_arg<T,N>, &Multiply_gamma6_arg<T,N>, &Multiply_gamma7_arg<T,N>, &Multiply_gamma8_arg<T,N>, &Multiply_gamma9_arg<T,N>, &Multiply_gamma10_arg<T,N>, &Multiply_gamma11_arg<T,N>, &Multiply_gamma12_arg<T,N>, &Multiply_gamma13_arg<T,N>, &Multiply_gamma14_arg<T,N>, &Multiply_gamma15_arg<T,N>};     return s[a.elem()](b); }
operator()(const T1 &a, const T2 &b) const { pokeSpin(const_cast<T1&>(a),b,row,col); return const_cast<T1&>(a); }
inline T OpGammaTypeMultiply:: operator()(const GammaType<N>& a, const T &b) const{  typedef T (*Ptrfunc)(const T&);  Ptrfunc s[] = {&Multiply_gamma0_arg<T,N>, 		 &Multiply_gamma1_arg<T,N>,		 &Multiply_gamma2_arg<T,N>,		 &Multiply_gamma3_arg<T,N>,		 &Multiply_gamma4_arg<T,N>,		 &Multiply_gamma5_arg<T,N>,		 &Multiply_gamma6_arg<T,N>,		 &Multiply_gamma7_arg<T,N>,		 &Multiply_gamma8_arg<T,N>,		 &Multiply_gamma9_arg<T,N>,		 &Multiply_gamma10_arg<T,N>,		 &Multiply_gamma11_arg<T,N>,		 &Multiply_gamma12_arg<T,N>,		 &Multiply_gamma13_arg<T,N>,		 &Multiply_gamma14_arg<T,N>,		 &Multiply_gamma15_arg<T,N>};  // Using the function pointer table, call via indirection the desired function  // based on the argument to Gamma. It is assumed the argument must be a valid   // integer since Gamma was constructed (and should check it).  return s[a.elem()](b);}