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 --- undoaction.cpp | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 56 insertions(+), 6 deletions(-) (limited to 'undoaction.cpp') diff --git a/undoaction.cpp b/undoaction.cpp index 5d2e5268..8b596888 100644 --- a/undoaction.cpp +++ b/undoaction.cpp @@ -25,13 +25,63 @@ using namespace Json; using namespace std; -UndoAction::UndoAction(const BNUndoAction& action) +UndoAction::UndoAction(BNUndoAction* action) { - actionType = action.actionType; - summaryText = action.summaryText; - summaryTokens.reserve(action.summaryTokenCount); - for (size_t i = 0; i < action.summaryTokenCount; i++) + m_object = action; +} + + +std::string UndoAction::GetSummaryText() +{ + char* summary = BNUndoActionGetSummaryText(m_object); + std::string result = summary; + BNFreeString(summary); + return result; +} + + +vector UndoAction::GetSummary() +{ + size_t count = 0; + BNInstructionTextToken* result = BNUndoActionGetSummary(m_object, &count); + vector newTokens; + return InstructionTextToken::ConvertAndFreeInstructionTextTokenList(result, count); +} + + +UndoEntry::UndoEntry(BNUndoEntry* entry) +{ + m_object = entry; +} + + +std::string UndoEntry::GetId() +{ + char* id = BNUndoEntryGetId(m_object); + std::string result = id; + BNFreeString(id); + return result; +} + + +std::vector> UndoEntry::GetActions() +{ + size_t count; + + BNUndoAction** actions = BNUndoEntryGetActions(m_object, &count); + std::vector> result; + result.reserve(count); + for (size_t i = 0; i < count; i++) { - summaryTokens.push_back(action.summaryTokens[i]); + result.push_back(new UndoAction(BNNewUndoActionReference(actions[i]))); } + + BNFreeUndoActionList(actions, count); + return result; +} + + +uint64_t UndoEntry::GetTimestamp() +{ + return BNUndoEntryGetTimestamp(m_object); } -- cgit v1.3.1