// // QCDLoop 2016 // // Authors: Stefano Carrazza: stefano.carrazza@cern.ch // Keith Ellis: keith.ellis@durham.ac.uk // Giulia Zanderighi: giulia.zanderighi@cern.ch #include "qcdloop/topology.h" #include "qcdloop/tools.h" #include "qcdloop/exceptions.h" namespace ql { /*! * \brief Topology::Topology * \param name */ template Topology::Topology(string name): Tools(), LRUCache >(1), _name(name), _key(), _mu2(this->_zero), _ch(new ContainerHasher()) { _val.resize(3); } /*! * \brief Topology::Topology * \param obj */ template Topology::Topology(const Topology &obj): Tools(obj), LRUCache >(obj), _name(obj._name), _key(obj._key), _mu2(obj._mu2), _m(obj._m), _p(obj._p), _val(obj._val), _ch(obj._ch) { } /*! * \brief Topology::~Topology */ template Topology::~Topology() { _val.clear(); _m.clear(); _p.clear(); delete _ch; } /*! * \brief Topology::checkCache * \param mu2 * \param m * \param p * \return true if the cache already contains the cofiguration */ template bool Topology::checkCache(const TScale &mu2, const vector &m, const vector &p) { const int cz = this->getCacheSize(); if (cz == 1) { if (_mu2 == mu2 && _m == m && _p == p) return true; } else if (cz > 1) { _key = _ch->genkey(mu2, m, p); if (this->get(_key,_val)) return true; } return false; } /*! * \brief Topology::storeCache */ template void Topology::storeCache(const TScale &mu2, const vector &m, const vector &p) { const int cz = this->getCacheSize(); if (cz == 1) { _mu2 = mu2; std::copy(m.begin(), m.end(), _m.begin()); std::copy(p.begin(), p.end(), _p.begin()); } else if (cz > 1) this->store(_key,_val); } // explicity template declaration template class Topology; template class Topology; template class Topology; template class Topology; }