]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level/level_editor/undo_history.h
Remove TODO(#956)
[nothing.git] / src / game / level / level_editor / undo_history.h
index 75d12953af829905689c5a00ac661dda55452603..f9623f38f9c7f9bbc06608a49847ec81f94f8f22 100644 (file)
@@ -1,55 +1,24 @@
 #ifndef UNDO_HISTORY_H_
 #define UNDO_HISTORY_H_
 
-#include "layer.h"
+#include "stack.h"
 
-// TODO(#1030): UndoHistory context size is fixed
-//   If we treated it as a stack we could store
-//   the elements with variable size.
-#define CONTEXT_SIZE 256
-
-#define ASSERT_CONTEXT_SIZE(context)               \
-    trace_assert(sizeof(context) <= CONTEXT_SIZE)
+typedef void (*RevertAction)(void *context, size_t context_size);
 
 typedef struct {
-    char data[CONTEXT_SIZE];
-} Context;
-
-typedef void (*RevertAction)(void *layer, Context context);
-
-typedef struct {
-    void *layer;
-    Context context;
-    RevertAction revert;
-} Action;
+    Stack actions;
+} UndoHistory;
 
 static inline
-Action create_action(void *layer, RevertAction revert,
-                     void *context_data,
-                     size_t context_data_size)
+void destroy_undo_history(UndoHistory undo_history)
 {
-    trace_assert(layer);
-    trace_assert(revert);
-    trace_assert(context_data_size < CONTEXT_SIZE);
-
-    Action action = {
-        .layer = layer,
-        .revert = revert
-    };
-
-    if (context_data) {
-        memcpy(action.context.data, context_data, context_data_size);
-    }
-
-    return action;
+    destroy_stack(undo_history.actions);
 }
 
-typedef struct UndoHistory UndoHistory;
-
-UndoHistory *create_undo_history(void);
-void destroy_undo_history(UndoHistory *undo_history);
-
-void undo_history_push(UndoHistory *undo_history, Action action);
+void undo_history_push(UndoHistory *undo_history,
+                       RevertAction revert,
+                       void *context_data,
+                       size_t context_data_size);
 void undo_history_pop(UndoHistory *undo_history);
 
 #endif  // UNDO_HISTORY_H_