Files
anm2ed/src/snapshots.cpp
2025-11-18 00:56:32 -05:00

86 lines
1.5 KiB
C++

#include "snapshots.h"
#include <algorithm>
using namespace anm2ed::snapshots;
namespace anm2ed
{
int SnapshotStack::maxSize = snapshots::MAX;
bool SnapshotStack::is_empty() { return stack.empty(); }
void SnapshotStack::push(const Snapshot& snapshot)
{
if (maxSize <= 0)
{
stack.clear();
return;
}
if ((int)stack.size() >= maxSize) stack.pop_front();
stack.push_back(snapshot);
}
std::optional<Snapshot> SnapshotStack::pop()
{
if (is_empty()) return std::nullopt;
auto snapshot = stack.back();
stack.pop_back();
return snapshot;
}
void SnapshotStack::clear() { stack.clear(); }
void SnapshotStack::trim_to_limit()
{
if (maxSize <= 0)
{
clear();
return;
}
while ((int)stack.size() > maxSize)
stack.pop_front();
}
void SnapshotStack::max_size_set(int value) { maxSize = std::max(0, value); }
int SnapshotStack::max_size_get() { return maxSize; }
void Snapshots::push(const Snapshot& snapshot)
{
undoStack.push(snapshot);
redoStack.clear();
}
void Snapshots::undo()
{
if (auto snapshot = undoStack.pop())
{
redoStack.push(current);
current = *snapshot;
}
}
void Snapshots::redo()
{
if (auto snapshot = redoStack.pop())
{
undoStack.push(current);
current = *snapshot;
}
}
void Snapshots::reset()
{
undoStack.clear();
redoStack.clear();
}
void Snapshots::apply_limit()
{
undoStack.trim_to_limit();
redoStack.trim_to_limit();
}
};