Commit 33c1eea9 by Maarten L. Hekkelman

Fix copy construction, do not copy the links

parent f05363ea
...@@ -45,11 +45,10 @@ class datablock : public std::list<category> ...@@ -45,11 +45,10 @@ class datablock : public std::list<category>
{ {
} }
datablock(const datablock &) = default; datablock(const datablock &);
datablock(datablock &&) = default; datablock(datablock &&) = default;
datablock &operator=(const datablock &) = default; datablock &operator=(const datablock &);
datablock &operator=(datablock &&) = default; datablock &operator=(datablock &&) = default;
// -------------------------------------------------------------------- // --------------------------------------------------------------------
......
...@@ -595,8 +595,6 @@ category::category(const category &rhs) ...@@ -595,8 +595,6 @@ category::category(const category &rhs)
, m_columns(rhs.m_columns) , m_columns(rhs.m_columns)
, m_validator(rhs.m_validator) , m_validator(rhs.m_validator)
, m_cat_validator(rhs.m_cat_validator) , m_cat_validator(rhs.m_cat_validator)
, m_parent_links(rhs.m_parent_links)
, m_child_links(rhs.m_child_links)
, m_cascade(rhs.m_cascade) , m_cascade(rhs.m_cascade)
{ {
for (auto r = rhs.m_head; r != nullptr; r = r->m_next) for (auto r = rhs.m_head; r != nullptr; r = r->m_next)
...@@ -645,8 +643,6 @@ category &category::operator=(const category &rhs) ...@@ -645,8 +643,6 @@ category &category::operator=(const category &rhs)
m_validator = rhs.m_validator; m_validator = rhs.m_validator;
m_cat_validator = rhs.m_cat_validator; m_cat_validator = rhs.m_cat_validator;
m_parent_links = rhs.m_parent_links;
m_child_links = rhs.m_child_links;
if (m_cat_validator != nullptr) if (m_cat_validator != nullptr)
m_index = new category_index(this); m_index = new category_index(this);
...@@ -983,11 +979,19 @@ bool category::validate_links() const ...@@ -983,11 +979,19 @@ bool category::validate_links() const
row_handle category::operator[](const key_type &key) row_handle category::operator[](const key_type &key)
{ {
row_handle result{};
if (not empty())
{
if (m_index == nullptr) if (m_index == nullptr)
throw std::logic_error("Category " + m_name + " does not have an index"); throw std::logic_error("Category " + m_name + " does not have an index");
auto row = m_index->find_by_value(key); auto row = m_index->find_by_value(key);
return row != nullptr ? row_handle{ *this, *row } : row_handle{}; if (row != nullptr)
result = { *this, *row };
}
return result;
} }
// -------------------------------------------------------------------- // --------------------------------------------------------------------
......
...@@ -29,6 +29,30 @@ ...@@ -29,6 +29,30 @@
namespace cif namespace cif
{ {
datablock::datablock(const datablock &db)
: std::list<category>(db)
, m_name(db.m_name)
, m_validator(db.m_validator)
{
for (auto &cat : *this)
cat.update_links(*this);
}
datablock &datablock::operator=(const datablock &db)
{
if (this != &db)
{
std::list<category>::operator=(db);
m_name = db.m_name;
m_validator = db.m_validator;
for (auto &cat : *this)
cat.update_links(*this);
}
return *this;
}
void datablock::set_validator(const validator *v) void datablock::set_validator(const validator *v)
{ {
m_validator = v; m_validator = v;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment