summaryrefslogtreecommitdiff
path: root/binaryninjaapi.h
diff options
context:
space:
mode:
Diffstat (limited to 'binaryninjaapi.h')
-rw-r--r--binaryninjaapi.h40
1 files changed, 33 insertions, 7 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index c29804b6..0eaf38b7 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -10,6 +10,7 @@
#include <exception>
#include <functional>
#include "binaryninjacore.h"
+#include "json/json.h"
#ifdef _MSC_VER
#define NOEXCEPT
@@ -226,19 +227,45 @@ namespace BinaryNinja
virtual bool Navigate(const std::string& view, uint64_t offset) = 0;
};
+ class BinaryView;
+
class UndoAction
{
private:
- static void UndoCallback(void* ctxt);
- static void RedoCallback(void* ctxt);
+ std::string m_name;
+
+ static void UndoCallback(void* ctxt, BNBinaryView* data);
+ static void RedoCallback(void* ctxt, BNBinaryView* data);
+ static char* SerializeCallback(void* ctxt);
public:
+ UndoAction(const std::string& name);
virtual ~UndoAction() {}
- void Add(BNFileMetadata* file);
+ const std::string& GetName() const { return m_name; }
+ BNUndoAction GetCallbacks();
+
+ void Add(BNBinaryView* view);
- virtual void Undo() = 0;
- virtual void Redo() = 0;
+ virtual void Undo(BinaryView* data) = 0;
+ virtual void Redo(BinaryView* data) = 0;
+ virtual Json::Value Serialize() = 0;
+ };
+
+ class UndoActionType
+ {
+ protected:
+ std::string m_nameForRegister;
+
+ static bool DeserializeCallback(void* ctxt, const char* data, BNUndoAction* result);
+
+ public:
+ UndoActionType(const std::string& name);
+ virtual ~UndoActionType() {}
+
+ static void Register(UndoActionType* type);
+
+ virtual UndoAction* Deserialize(const Json::Value& data) = 0;
};
class FileMetadata: public RefCountObject
@@ -263,7 +290,6 @@ namespace BinaryNinja
void MarkFileSaved();
void BeginUndoActions();
- void AddUndoAction(UndoAction* action);
void CommitUndoActions();
bool Undo();
@@ -374,7 +400,7 @@ namespace BinaryNinja
BNBinaryView* m_view;
Ref<FileMetadata> m_file;
- BinaryView(FileMetadata* file);
+ BinaryView(const std::string& typeName, FileMetadata* file);
virtual size_t PerformRead(void* dest, uint64_t offset, size_t len) { (void)dest; (void)offset; (void)len; return 0; }
virtual size_t PerformWrite(uint64_t offset, const void* data, size_t len) { (void)offset; (void)data; (void)len; return 0; }