#include "METOOLS/Currents/C_Scalar.H" #include "ATOOLS/Org/CXXFLAGS.H" using namespace METOOLS; template double CScalar::s_accu(1.0e-12); template std::ostream & METOOLS::operator<<(std::ostream &str,const CScalar &s) { return str<<'{'< void CScalar::ResetAccu() { s_accu=Accu(); } template void CScalar::Add(const CObject *c) { const CScalar *s(static_cast(c)); m_x+=s->m_x; } template void CScalar::Divide(const double &d) { m_x/=Scalar(d); } template void CScalar::Multiply(const Complex &c) { m_x*=SComplex(c); } template void CScalar::Invert() { m_x=-m_x; } template typename ATOOLS::AutoDelete_Vector > CScalar::s_objects; template bool CScalar::IsZero() const { return m_x==Scalar(0.0); } template CScalar *CScalar::New() { #ifndef USING__Threading if (s_objects.empty()) #endif return new CScalar(); CScalar *v(s_objects.back()); s_objects.pop_back(); return v; } template CScalar *CScalar::New(const CScalar &s) { #ifndef USING__Threading if (s_objects.empty()) #endif return new CScalar(s); CScalar *v(s_objects.back()); s_objects.pop_back(); *v=s; return v; } template CObject *CScalar::Copy() const { return CScalar::New(*this); } template void CScalar::Delete() { #ifndef USING__Threading s_objects.push_back(this); #else delete this; #endif } namespace METOOLS { template class DCScalar; template std::ostream &operator<<(std::ostream &ostr,const DCScalar &s); template class QCScalar; template std::ostream &operator<<(std::ostream &ostr,const QCScalar &s); }