3#include <wmtk/utils/VectorUtils.h>
4#include <wmtk/utils/Logger.hpp>
6#include <wmtk/threading/enumerable_thread_specific.hpp>
13#include <unordered_map>
25 virtual void move(
size_t from,
size_t to) {};
26 virtual void resize(
size_t) = 0;
33 virtual void clear() = 0;
34 virtual void rollback() = 0;
35 virtual void begin_protect() = 0;
36 virtual void end_protect() = 0;
47 void move(
size_t from,
size_t to)
override
49 if (from == to)
return;
50 m_attributes[to] = std::move(m_attributes[from]);
57 void resize(
size_t s)
override
59 if (s > m_attributes.size()) m_attributes.resize(s);
63 for (
size_t i = first; i < m_attributes.size(); ++i) m_attributes[i] = T{};
65 void clear()
override { m_attributes.clear(); }
73 for (
auto& [i, v] : m_rollback_list.local()) {
74 m_attributes[i] = std::move(v);
84 m_rollback_list.local().clear();
85 recording.local() =
true;
93 m_rollback_list.local().clear();
94 recording.local() =
false;
98 for (
const auto& kv : m_rollback_list.local()) out.push_back(kv.first);
101 const T& at(
size_t i)
const {
return m_attributes[i]; }
103 const T& operator[](
size_t i)
const {
return at(i); }
105 T& operator[](
size_t i)
107 if (recording.local()) {
108 m_rollback_list.local().emplace(i, m_attributes[i]);
110 return m_attributes[i];
114 size_t size()
const {
return m_attributes.size(); }
117 std::vector<T> m_attributes;
147 void move(
size_t from,
size_t to)
override
149 for (
auto* c : m_children) c->move(from, to);
151 void resize(
size_t s)
override
153 for (
auto* c : m_children) c->resize(s);
157 for (
auto* c : m_children) c->reset_from(first);
159 void clear()
override
161 for (
auto* c : m_children) c->clear();
163 void rollback()
override
165 for (
auto* c : m_children) c->rollback();
167 void begin_protect()
override
169 for (
auto* c : m_children) c->begin_protect();
171 void end_protect()
override
173 for (
auto* c : m_children) c->end_protect();
177 for (
auto* c : m_children) c->append_recorded(out);
181 std::vector<AbstractAttributeContainer*> m_children;
serving as buffers for attributes data that can be modified by operations
Definition AttributeCollection.hpp:22
virtual void append_recorded(std::vector< size_t > &out)
Definition AttributeCollection.hpp:40
virtual void reset_from(size_t first)=0
Several attribute collections for the same simplex type, behind one container.
Definition AttributeCollection.hpp:143
void reset_from(size_t first) override
Definition AttributeCollection.hpp:155
void append_recorded(std::vector< size_t > &out) override
Definition AttributeCollection.hpp:175
Definition enumerable_thread_specific.hpp:37
Definition AttributeCollection.hpp:46
void reset_from(size_t first) override
Definition AttributeCollection.hpp:61
void rollback() override
retrieve the protected attribute data on operation-fail
Definition AttributeCollection.hpp:71
void end_protect() override
clear local buffers and finish recording
Definition AttributeCollection.hpp:91
void append_recorded(std::vector< size_t > &out) override
Definition AttributeCollection.hpp:96
void begin_protect() override
clean local buffers for attribute, and start recording
Definition AttributeCollection.hpp:82