summaryrefslogtreecommitdiff
path: root/database.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'database.cpp')
-rw-r--r--database.cpp28
1 files changed, 9 insertions, 19 deletions
diff --git a/database.cpp b/database.cpp
index 26802f29..f3a6072f 100644
--- a/database.cpp
+++ b/database.cpp
@@ -298,41 +298,31 @@ DataBuffer Snapshot::GetUndoData()
}
-vector<UndoEntry> Snapshot::GetUndoEntries()
+vector<Ref<UndoEntry>> Snapshot::GetUndoEntries()
{
return GetUndoEntries([](size_t, size_t) { return true; });
}
-vector<UndoEntry> Snapshot::GetUndoEntries(const std::function<bool(size_t, size_t)>& progress)
+vector<Ref<UndoEntry>> Snapshot::GetUndoEntries(const std::function<bool(size_t, size_t)>& progress)
{
ProgressContext pctxt;
pctxt.callback = progress;
- size_t numEntries;
- BNUndoEntry* entries = BNGetSnapshotUndoEntriesWithProgress(m_object, &pctxt, ProgressCallback, &numEntries);
+ size_t count;
+ BNUndoEntry** entries = BNGetSnapshotUndoEntriesWithProgress(m_object, &pctxt, ProgressCallback, &count);
if (entries == nullptr)
{
- throw DatabaseException("BNGetSnapshotUndoEntries");
+ throw DatabaseException("BNGetSnapshotUndoEntriesWithProgress");
}
- vector<UndoEntry> result;
- result.reserve(numEntries);
- for (size_t i = 0; i < numEntries; i++)
+ vector<Ref<UndoEntry>> result;
+ for (size_t i = 0; i < count; i++)
{
- UndoEntry temp;
- temp.timestamp = entries[i].timestamp;
- temp.id = entries[i].id;
- temp.user = new User(BNNewUserReference(entries[i].user));
- size_t actionCount = entries[i].actionCount;
- for (size_t actionIndex = 0; actionIndex < actionCount; actionIndex++)
- {
- temp.actions.emplace_back(entries[i].actions[actionIndex]);
- }
- result.push_back(temp);
+ result.push_back(new UndoEntry(BNNewUndoEntryReference(entries[i])));
}
+ BNFreeUndoEntryList(entries, count);
- BNFreeUndoEntries(entries, numEntries);
return result;
}