17 template<
typename ClosureType,
typename T>
20 template<
typename ...Args>
32 ClosureType m_onUpdate;
46 template<
typename ValueType>
63 std::swap(m_state, *m_dataRef);
66 void Swap()
override { std::swap(*m_dataRef, m_state); }
69 bool HasChanged()
const override {
return !(*m_dataRef == m_state); }
90 template<
typename T,
typename UpdateClosure>
96 template<
typename T,
typename UpdateClosure>
113 template<auto GetterFn, auto SetterFn,
typename ValueType,
typename Obj>
119 m_state((m_dataRef->*GetterFn)())
132 ValueType t = (m_dataRef->*GetterFn)();
133 std::swap(t, m_state);
134 (m_dataRef->*SetterFn)(std::move(t));
137 bool HasChanged()
const override {
return !((m_dataRef->*GetterFn)() == m_state); }
146 template<auto GetterFn, auto SetterFn,
typename Obj>
149 using ValueType =
decltype((dataRef->*GetterFn)());
153 template<auto GetterFn, auto SetterFn,
typename Obj,
typename T>
156 using ValueType =
decltype((dataRef->*GetterFn)());
160 template<auto GetterFn, auto SetterFn,
typename Obj,
typename UpdateClosure>
163 using ValueType =
decltype((dataRef->*GetterFn)());
167 template<auto GetterFn, auto SetterFn,
typename Obj,
typename T,
typename UpdateClosure>
170 using ValueType =
decltype((dataRef->*GetterFn)());
186 template<
typename Container>
193 m_container(*container),
202 m_container(*container),
213 m_container.insert(m_container.begin() + m_idx, std::move(m_value));
215 m_value = std::move(m_container[m_idx]);
216 m_container.erase(m_container.begin() + m_idx);
219 m_insert = !m_insert;
223 Container &m_container;
244 template<
typename Container>
251 m_container(*container),
253 m_state(m_container[idx])
257 void Swap()
override { std::swap(m_container[m_index], m_state); }
259 bool HasChanged()
const override {
return !(m_container[m_index] == m_state); }
262 Container &m_container;
269 template<
typename T,
typename Value =
typename T::value_type>
272 if (idx ==
size_t(-1))
273 idx = containerRef->size();
281 if (idx ==
size_t(-1))
282 idx = containerRef->size() - 1;
290 if (idx ==
size_t(-1))
291 idx = containerRef->size() - 1;
296 template<
typename T,
typename UpdateClosure,
typename Value =
typename T::value_type>
302 template<
typename T,
typename UpdateClosure>
308 template<
typename T,
typename UpdateClosure>
311 if (idx ==
size_t(-1))
312 idx = containerRef->size() - 1;
Definition: UndoStepType.h:18
void Swap() override
Definition: UndoStepType.h:26
UndoClosure(ClosureType &&closure, Args ...args)
Definition: UndoStepType.h:21
Definition: UndoStepType.h:115
void Swap() override
Definition: UndoStepType.h:131
UndoGetSetValueStep(Obj *data)
Definition: UndoStepType.h:117
UndoGetSetValueStep(Obj *data, const ValueType &newValue)
Definition: UndoStepType.h:123
bool HasChanged() const override
Definition: UndoStepType.h:137
Definition: UndoStepType.h:48
UndoSingleValueStep(ValueType *data)
Definition: UndoStepType.h:51
bool HasChanged() const override
Definition: UndoStepType.h:69
UndoSingleValueStep(ValueType *data, const ValueType &newValue)
Definition: UndoStepType.h:59
void Swap() override
Definition: UndoStepType.h:66
Definition: UndoSystem.h:31
Definition: UndoSystem.h:112
void AddUndoStep(Args &&...args)
Definition: UndoSystem.h:153
Definition: UndoStepType.h:246
bool HasChanged() const override
Definition: UndoStepType.h:259
void Swap() override
Definition: UndoStepType.h:257
UndoVectorSingleValueStep(Container *container, size_t idx)
Definition: UndoStepType.h:250
typename Container::value_type ValueType
Definition: UndoStepType.h:248
Definition: UndoStepType.h:188
typename Container::value_type ValueType
Definition: UndoStepType.h:190
UndoVectorStep(Container *container, size_t removeIdx)
Definition: UndoStepType.h:201
UndoVectorStep(Container *container, const ValueType &newValue, size_t insertIdx)
Definition: UndoStepType.h:192
void Swap() override
Definition: UndoStepType.h:210
Definition: ActionBinder.h:14
void AddUndoVectorInsertClosure(UndoSystem *s, T *containerRef, const Value &value, size_t idx, UpdateClosure closure)
Definition: UndoStepType.h:297
void AddUndoSingleValueClosure(UndoSystem *s, T *dataRef, UpdateClosure closure)
Definition: UndoStepType.h:91
void AddUndoGetSetValue(UndoSystem *s, Obj *dataRef)
Definition: UndoStepType.h:147
void AddUndoSingleValue(UndoSystem *s, T *dataRef)
Definition: UndoStepType.h:79
void AddUndoVectorErase(UndoSystem *s, T *containerRef, size_t idx=-1)
Definition: UndoStepType.h:279
void AddUndoVectorSingleValue(UndoSystem *s, T *containerRef, size_t idx=-1)
Definition: UndoStepType.h:288
void AddUndoVectorInsert(UndoSystem *s, T *containerRef, const Value &value, size_t idx=-1)
Definition: UndoStepType.h:270
void AddUndoVectorEraseClosure(UndoSystem *s, T *containerRef, size_t idx, UpdateClosure closure)
Definition: UndoStepType.h:303
void AddUndoGetSetValueClosure(UndoSystem *s, Obj *dataRef, UpdateClosure &&closure)
Definition: UndoStepType.h:161