Skip to content
Snippets Groups Projects
Commit 10cc98dc authored by Michael Davis's avatar Michael Davis
Browse files

[lpa-stream] Tightens up QueueItor move constructor

When the object is move constructed, everything is moved except
list::end(), which doesn't point to an actual object in memory and is
recreated with a new address. So in the case where the iterator points
to rhs.list::end(), it needs to be explicitly reset.
parent 3c156223
No related branches found
No related tags found
No related merge requests found
......@@ -78,16 +78,6 @@ QueueItor(objectstore::Backend &objectStore, const std::string &queue_id) :
if(m_jobQueuesQueueIt != m_jobQueuesQueue.end()) {
getQueueJobs();
}
std::cerr << "m_jobQueuesQueueIt = " << &(*m_jobQueuesQueueIt) << std::endl;
std::cerr << "m_jobQueuesQueue.size() = " << m_jobQueuesQueue.size() << std::endl;
std::cerr << "m_jobQueuesQueue.begin() = " << &(*m_jobQueuesQueue.begin()) << std::endl;
std::cerr << "m_jobQueuesQueue.end() = " << &(*m_jobQueuesQueue.end()) << std::endl;
std::cerr << "m_jobQueueIt = " << &(*m_jobQueueIt) << std::endl;
std::cerr << "m_jobQueue.size() = " << m_jobQueue.size() << std::endl;
std::cerr << "m_jobQueue.begin() = " << &(*m_jobQueue.begin()) << std::endl;
std::cerr << "m_jobQueue.end() = " << &(*m_jobQueue.end()) << std::endl;
}
//------------------------------------------------------------------------------
......@@ -179,16 +169,6 @@ QueueItor(objectstore::Backend &objectStore, const std::string &queue_id) :
if(m_jobQueuesQueueIt != m_jobQueuesQueue.end()) {
getQueueJobs();
}
std::cerr << "m_jobQueuesQueueIt = " << &(*m_jobQueuesQueueIt) << std::endl;
std::cerr << "m_jobQueuesQueue.size() = " << m_jobQueuesQueue.size() << std::endl;
std::cerr << "m_jobQueuesQueue.begin() = " << &(*m_jobQueuesQueue.begin()) << std::endl;
std::cerr << "m_jobQueuesQueue.end() = " << &(*m_jobQueuesQueue.end()) << std::endl;
std::cerr << "m_jobQueueIt = " << &(*m_jobQueueIt) << std::endl;
std::cerr << "m_jobQueue.size() = " << m_jobQueue.size() << std::endl;
std::cerr << "m_jobQueue.begin() = " << &(*m_jobQueue.begin()) << std::endl;
std::cerr << "m_jobQueue.end() = " << &(*m_jobQueue.end()) << std::endl;
}
//------------------------------------------------------------------------------
......
......@@ -18,8 +18,6 @@
#pragma once
#include <iostream>
#include <objectstore/Backend.hpp>
#include <objectstore/ObjectOps.hpp>
......@@ -47,28 +45,16 @@ public:
m_jobQueue(std::move(std::move(rhs).m_jobQueue)),
m_jobQueueIt(std::move(rhs).m_jobQueueIt)
{
std::cerr << "Called Move constructor:" << std::endl;
// Compiler optimisation allows empty lists to be copied instead of moved. In this case we need
// to explicitly set the iterators.
// The move constructor works for all queue members, including begin(), but not for end() which
// does not point to an actual object! In the case where the iterator points to end(), including
// the case of an empty queue, we need to explicitly set it.
if(m_jobQueuesQueue.size() == 0) {
m_jobQueuesQueueIt = m_jobQueuesQueue.begin();
if(m_jobQueuesQueueIt == rhs.m_jobQueuesQueue.end()) {
m_jobQueuesQueueIt = m_jobQueuesQueue.end();
}
if(m_jobQueue.size() == 0) {
m_jobQueueIt = m_jobQueue.begin();
if(m_jobQueueIt == rhs.m_jobQueue.end()) {
m_jobQueueIt = m_jobQueue.end();
}
std::cerr << "m_jobQueuesQueueIt = " << &(*m_jobQueuesQueueIt) << std::endl;
std::cerr << "m_jobQueuesQueue.size() = " << m_jobQueuesQueue.size() << std::endl;
std::cerr << "m_jobQueuesQueue.begin() = " << &(*m_jobQueuesQueue.begin()) << std::endl;
std::cerr << "m_jobQueuesQueue.end() = " << &(*m_jobQueuesQueue.end()) << std::endl;
std::cerr << "m_jobQueueIt = " << &(*m_jobQueueIt) << std::endl;
std::cerr << "m_jobQueue.size() = " << m_jobQueue.size() << std::endl;
std::cerr << "m_jobQueue.begin() = " << &(*m_jobQueue.begin()) << std::endl;
std::cerr << "m_jobQueue.end() = " << &(*m_jobQueue.end()) << std::endl;
}
//! No assignment constructor
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment