X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;ds=sidebyside;f=cinelerra-5.1%2Fcinelerra%2Fundostack.h;h=8c39d8be71455a2490986a7b467af735e0b98c18;hb=21eb2e0b479adf7bf846b835e5c7d9613b6f1a6d;hp=5893c4cac68a026171e65729e8d27d934c84c07e;hpb=21c2e6b36d6a96c2f662a89459d607b5a387f4eb;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/undostack.h b/cinelerra-5.1/cinelerra/undostack.h index 5893c4ca..8c39d8be 100644 --- a/cinelerra-5.1/cinelerra/undostack.h +++ b/cinelerra-5.1/cinelerra/undostack.h @@ -31,11 +31,56 @@ #define UNDOLEVELS 500 #define UNDO_KEY_INTERVAL 100 -// The undo stack is a series of key undo buffers and -// incremental undo buffers. The incremental buffers -// store the differences in the most compact way possible: -// a series of offsets, sizes and values. This should allow -// a huge number of undo updates. + +#define hash_sz2 8 +#define hash_sz (1< +{ +public: + UndoVersion(int v) { ver = v; } + ~UndoVersion() { remove_all_objects(); } + int ver; + + void scan_lines(UndoHashTable *hash, char *sp, char *ep); +}; class UndoStackItem : public ListItem @@ -56,19 +101,15 @@ public: // The string must be deleted by the user. char* get_data(); char* get_filename(); - int has_data(); int get_size(); int is_key(); uint64_t get_flags(); - -// Get pointer to incremental data for use in an apply_difference command. - char* get_incremental_data(); - int get_incremental_size(); - void set_creator(void *creator); void* get_creator(); + void save(FILE *fp); + void load(FILE *fp); private: // command description for the menu item char *description; @@ -95,19 +136,21 @@ public: UndoStack(); ~UndoStack(); +// get current undo/redo stack item + UndoStackItem *get_current_undo(); + UndoStackItem *get_current_redo(); + // Create a new undo entry and put on the stack. // The current pointer points to the new entry. // delete future undos if in the middle // delete undos older than UNDOLEVELS if last UndoStackItem* push(); -// move to the previous undo entry - void pull(); - - // move to the next undo entry for a redo UndoStackItem* pull_next(); + void save(FILE *fp); + void load(FILE *fp); void dump(FILE *fp=stdout); UndoStackItem* current;