10 #ifndef ROOT_Minuit2_ABObj 
   11 #define ROOT_Minuit2_ABObj 
   20 template<
class mtype, 
class M, 
class T>
 
   29   ABObj() : fObject(M()), fFactor(T(0.)) {}
 
   31   ABObj& operator=(
const ABObj&) {
return *
this;}
 
   33   template<
class a, 
class b, 
class c>
 
   34   ABObj(
const ABObj<a,b,c>&) : fObject(M()), fFactor(T(0.)) {}
 
   36   template<
class a, 
class b, 
class c>
 
   37   ABObj& operator=(
const ABObj<a,b,c>&) {
return *
this;}
 
   41   ABObj(
const M& obj) : fObject(obj), fFactor(T(1.)) {}
 
   43   ABObj(
const M& obj, T factor) : fObject(obj), fFactor(factor) {}
 
   47   ABObj(
const ABObj& obj) :
 
   48     fObject(obj.fObject), fFactor(obj.fFactor) {}
 
   50   template<
class b, 
class c>
 
   51   ABObj(
const ABObj<mtype,b,c>& obj) :
 
   52      fObject(M(obj.Obj() )), fFactor(T(obj.f() )) {}
 
   54   const M& Obj()
 const {
return fObject;}
 
   56   T f()
 const {
return fFactor;}
 
   65 template <> 
class ABObj<vec, LAVector, double> {
 
   73   ABObj& operator=(
const ABObj&) = 
delete;
 
   77   ABObj(
const LAVector& obj) : fObject(obj), fFactor(double(1.)) {}
 
   79   ABObj(
const LAVector& obj, 
double factor) : fObject(obj), fFactor(factor) {}
 
   89   ABObj(
const ABObj<vec,LAVector,c>& obj) :
 
   90     fObject(obj.fObject), fFactor(double(obj.fFactor)) {}
 
   92   const LAVector& Obj()
 const {
return fObject;}
 
   94   double f()
 const {
return fFactor;}
 
   98   const LAVector& fObject;
 
  103 template <> 
class ABObj<sym, LASymMatrix, double> {
 
  111   ABObj& operator=(
const ABObj&) {
return *
this;}
 
  115   ABObj(
const LASymMatrix& obj) : fObject(obj), fFactor(double(1.)) {}
 
  117   ABObj(
const LASymMatrix& obj, 
double factor) : fObject(obj), fFactor(factor) {}
 
  121   ABObj(
const ABObj& obj) :
 
  122     fObject(obj.fObject), fFactor(obj.fFactor) {}
 
  125   ABObj(
const ABObj<vec,LASymMatrix,c>& obj) :
 
  126     fObject(obj.fObject), fFactor(double(obj.fFactor)) {}
 
  128   const LASymMatrix& Obj()
 const {
return fObject;}
 
  130   double f()
 const {
return fFactor;}
 
  134   const LASymMatrix& fObject;
 
  139 template<
class mt, 
class M, 
class T>
 
  140 inline ABObj<mt, M, T> operator*(T f, 
const M& obj) {
 
  141   return ABObj<mt, M, T>(obj, f);
 
  145 template<
class mt, 
class M, 
class T>
 
  146 inline ABObj<mt, M, T> operator/(
const M& obj, T f) {
 
  147   return ABObj<mt, M, T>(obj, T(1.)/f);
 
  151 template<
class mt, 
class M, 
class T>
 
  152 inline ABObj<mt,M,T> operator-(
const M& obj) {
 
  153   return ABObj<mt,M,T>(obj, T(-1.));
 
  176 #endif  // ROOT_Minuit2_ABObj