#include "ct_containert.h" template CT_ContainerT::CT_ContainerT(Locker& accessLocker) : m_accessLocker(accessLocker), m_autoDelete(true) { } template CT_ContainerT::~CT_ContainerT() { clear(); } template void CT_ContainerT::append(T* element) { m_elementsToKeep.append(element); } template void CT_ContainerT::append(const QList& elements) { m_elementsToKeep.append(elements); } template bool CT_ContainerT::remove(T* element) { if(m_elementsToKeep.removeOne(element) || m_elementsToBeRemovedLater.removeOne(element)) { if(m_autoDelete) delete element; return true; } return false; } template int CT_ContainerT::nToKeep() const { return m_elementsToKeep.size(); } template int CT_ContainerT::nToBeRemovedLater() const { return m_elementsToBeRemovedLater.size(); } template int CT_ContainerT::nInTotal() const { return m_elementsToKeep.size() + m_elementsToBeRemovedLater.size(); } template bool CT_ContainerT::contains(const T* element) const { return m_elementsToKeep.contains(const_cast(element)); } template bool CT_ContainerT::visitElementsToKeep(const typename CT_ContainerT::ElementVisitor& visitor) const { for(const T* element : m_elementsToKeep) { if(!visitor(element)) return false; } return true; } template typename CT_ContainerT::iterator CT_ContainerT::begin() { return m_elementsToKeep.begin(); } template typename CT_ContainerT::iterator CT_ContainerT::end() { return m_elementsToKeep.end(); } template typename CT_ContainerT::const_iterator CT_ContainerT::constBegin() const { return m_elementsToKeep.constBegin(); } template typename CT_ContainerT::const_iterator CT_ContainerT::constEnd() const { return m_elementsToKeep.constEnd(); } template bool CT_ContainerT::visitElementsToBeRemovedLater(const typename CT_ContainerT::ElementVisitor& visitor) const { for(const T* element : m_elementsToBeRemovedLater) { if(!visitor(element)) return false; } return true; } template bool CT_ContainerT::visitAllElements(const typename CT_ContainerT::ElementVisitor& visitor) const { if(!visitElementsToKeep(visitor)) return false; return visitElementsToBeRemovedLater(visitor); } template void CT_ContainerT::setToBeRemovedLater(const T* element) { if(m_elementsToKeep.removeOne(const_cast(element))) m_elementsToBeRemovedLater.append(const_cast(element)); } template void CT_ContainerT::setToKeep(const T* element) { if(m_elementsToBeRemovedLater.removeOne(const_cast(element))) m_elementsToKeep.append(const_cast(element)); } template void CT_ContainerT::setAutoDelete(const bool& autoDelete) { m_autoDelete = autoDelete; } template bool CT_ContainerT::mustAutoDelete() const { return m_autoDelete; } template void CT_ContainerT::clear() { clearElementsToKeep(); clearElementsToBeRemovedLater(); } template void CT_ContainerT::clearElementsToKeep() { if(m_autoDelete) qDeleteAll(m_elementsToKeep); m_elementsToKeep.clear(); } template void CT_ContainerT::clearElementsToBeRemovedLater() { if(m_autoDelete) qDeleteAll(m_elementsToBeRemovedLater); m_elementsToBeRemovedLater.clear(); }