From cb407be11b08c1c427fcf33a49974155e522e14a Mon Sep 17 00:00:00 2001 From: Josh Ferrell Date: Wed, 8 May 2024 16:19:26 -0400 Subject: Ref count undo objects --- filemetadata.cpp | 94 +++++++++++++++----------------------------------------- 1 file changed, 24 insertions(+), 70 deletions(-) (limited to 'filemetadata.cpp') diff --git a/filemetadata.cpp b/filemetadata.cpp index 656fbce7..6aca379c 100644 --- a/filemetadata.cpp +++ b/filemetadata.cpp @@ -368,101 +368,55 @@ vector> FileMetadata::GetUsers() } -vector FileMetadata::GetUndoEntries() +vector> FileMetadata::GetUndoEntries() { - size_t numEntries; - BNUndoEntry* entries = BNGetUndoEntries(m_object, &numEntries); + size_t count; + BNUndoEntry** entries = BNGetUndoEntries(m_object, &count); - vector result; - result.reserve(numEntries); - for (size_t i = 0; i < numEntries; i++) + vector> result; + for (size_t i = 0; i < count; i++) { - if (!entries[i].valid) - continue; - 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]))); } - - // BNFreeUndoEntries(entries, count); + BNFreeUndoEntryList(entries, count); return result; } -vector FileMetadata::GetRedoEntries() +vector> FileMetadata::GetRedoEntries() { - size_t numEntries; - BNUndoEntry* entries = BNGetRedoEntries(m_object, &numEntries); + size_t count; + BNUndoEntry** entries = BNGetRedoEntries(m_object, &count); - vector result; - result.reserve(numEntries); - for (size_t i = 0; i < numEntries; i++) + vector> result; + for (size_t i = 0; i < count; i++) { - if (!entries[i].valid) - continue; - 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]))); } - - // BNFreeUndoEntries(entries, count); + BNFreeUndoEntryList(entries, count); return result; } -std::optional FileMetadata::GetLastUndoEntry() +Ref FileMetadata::GetLastUndoEntry() { - BNUndoEntry bnEntry = BNGetLastUndoEntry(m_object); - - if (!bnEntry.valid) - return {}; + BNUndoEntry* bnEntry = BNGetLastUndoEntry(m_object); - UndoEntry entry; - entry.timestamp = bnEntry.timestamp; - entry.id = bnEntry.id; - entry.user = new User(BNNewUserReference(bnEntry.user)); - size_t actionCount = bnEntry.actionCount; - for (size_t actionIndex = 0; actionIndex < actionCount; actionIndex++) - { - entry.actions.emplace_back(bnEntry.actions[actionIndex]); - } + if (bnEntry == nullptr) + return nullptr; - return entry; + return new UndoEntry(bnEntry); } -std::optional FileMetadata::GetLastRedoEntry() +Ref FileMetadata::GetLastRedoEntry() { - BNUndoEntry bnEntry = BNGetLastRedoEntry(m_object); + BNUndoEntry* bnEntry = BNGetLastRedoEntry(m_object); - if (!bnEntry.valid) - return {}; - - UndoEntry entry; - entry.timestamp = bnEntry.timestamp; - entry.id = bnEntry.id; - entry.user = new User(BNNewUserReference(bnEntry.user)); - size_t actionCount = bnEntry.actionCount; - for (size_t actionIndex = 0; actionIndex < actionCount; actionIndex++) - { - entry.actions.emplace_back(bnEntry.actions[actionIndex]); - } + if (bnEntry == nullptr) + return nullptr; - return entry; + return new UndoEntry(bnEntry); } -- cgit v1.3.1