Make DynamicGraph copyable
This commit is contained in:
parent
53f87c08b5
commit
4b75cb8b0e
@ -6,6 +6,7 @@
|
||||
|
||||
#include <boost/iterator/iterator_facade.hpp>
|
||||
|
||||
#include <algorithm>
|
||||
#include <limits>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
@ -254,9 +255,25 @@ template <typename ElementT> class DeallocatingVector
|
||||
bucket_list.emplace_back(new ElementT[ELEMENTS_PER_BLOCK]);
|
||||
}
|
||||
|
||||
// copying is not safe since this would only do a shallow copy
|
||||
DeallocatingVector(DeallocatingVector &other) = delete;
|
||||
DeallocatingVector &operator=(DeallocatingVector &other) = delete;
|
||||
// Performs a deep copy of the buckets
|
||||
DeallocatingVector(const DeallocatingVector &other)
|
||||
{
|
||||
bucket_list.resize(other.bucket_list.size());
|
||||
for (const auto index : util::irange<std::size_t>(0, bucket_list.size()))
|
||||
{
|
||||
bucket_list[index] = new ElementT[ELEMENTS_PER_BLOCK];
|
||||
std::copy_n(other.bucket_list[index], ELEMENTS_PER_BLOCK, bucket_list[index]);
|
||||
}
|
||||
current_size = other.current_size;
|
||||
}
|
||||
// Note we capture other by value
|
||||
DeallocatingVector &operator=(const DeallocatingVector &other)
|
||||
{
|
||||
auto copy_other = other;
|
||||
swap(copy_other);
|
||||
return *this;
|
||||
}
|
||||
|
||||
// moving is fine
|
||||
DeallocatingVector(DeallocatingVector &&other) { swap(other); }
|
||||
DeallocatingVector &operator=(DeallocatingVector &&other)
|
||||
|
@ -120,6 +120,23 @@ template <typename EdgeDataT> class DynamicGraph
|
||||
}
|
||||
}
|
||||
|
||||
DynamicGraph(const DynamicGraph &other)
|
||||
{
|
||||
number_of_nodes = other.number_of_nodes;
|
||||
// atomics can't be moved this is why we need an own constructor
|
||||
number_of_edges = static_cast<std::uint32_t>(other.number_of_edges);
|
||||
|
||||
node_array = other.node_array;
|
||||
edge_list = other.edge_list;
|
||||
}
|
||||
|
||||
DynamicGraph&operator=(const DynamicGraph &other)
|
||||
{
|
||||
auto copy_other = other;
|
||||
*this = std::move(other);
|
||||
return *this;
|
||||
}
|
||||
|
||||
DynamicGraph(DynamicGraph &&other)
|
||||
{
|
||||
number_of_nodes = other.number_of_nodes;
|
||||
|
Loading…
Reference in New Issue
Block a user