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

[lpa-stream] Adds move constructor

Default move constructor did not work in case of an empty list, as in
this case the list is not moved, a new empty list is instantiated. So
the copied iterators are invalid.

New move constructor is the same as default with an additional check to
reset the iterators if the lists to be moved are empty.
parent d12d772f
No related branches found
No related tags found
No related merge requests found
......@@ -78,6 +78,16 @@ 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;
}
//------------------------------------------------------------------------------
......@@ -169,6 +179,16 @@ 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,6 +18,8 @@
#pragma once
#include <iostream>
#include <objectstore/Backend.hpp>
#include <objectstore/ObjectOps.hpp>
......@@ -34,6 +36,44 @@ public:
//! Constructor
QueueItor(objectstore::Backend &objectStore, const std::string &queue_id = "");
// Default copy constructor is deleted in favour of move constructor
//! Move constructor
QueueItor(QueueItor &&rhs) :
m_objectStore(std::move(rhs).m_objectStore),
m_onlyThisQueueId(std::move(rhs).m_onlyThisQueueId),
m_jobQueuesQueue(std::move(rhs).m_jobQueuesQueue),
m_jobQueuesQueueIt(std::move(rhs).m_jobQueuesQueueIt),
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.
if(m_jobQueuesQueue.size() == 0) {
m_jobQueuesQueueIt = m_jobQueuesQueue.begin();
}
if(m_jobQueue.size() == 0) {
m_jobQueueIt = m_jobQueue.begin();
}
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
QueueItor operator=(QueueItor &rhs) = delete;
/*!
* Increment iterator
*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment