70 lines
1.1 KiB
C
70 lines
1.1 KiB
C
/*
|
|
* Mr. 4th Dimention - Allen Webster
|
|
*
|
|
* 24.01.2018
|
|
*
|
|
* Buffer types
|
|
*
|
|
*/
|
|
|
|
// TOP
|
|
|
|
#if !defined(FRED_UNDO_H)
|
|
#define FRED_UNDO_H
|
|
|
|
enum Edit_Type{
|
|
ED_NORMAL,
|
|
ED_REVERSE_NORMAL,
|
|
ED_UNDO,
|
|
ED_REDO,
|
|
};
|
|
|
|
struct Edit_Step{
|
|
Edit_Type type;
|
|
union{
|
|
struct{
|
|
b32 can_merge;
|
|
Buffer_Edit edit;
|
|
i32 next_block;
|
|
i32 prev_block;
|
|
};
|
|
struct{
|
|
i32 first_child;
|
|
i32 inverse_first_child;
|
|
i32 inverse_child_count;
|
|
i32 special_type;
|
|
};
|
|
};
|
|
i32 child_count;
|
|
};
|
|
|
|
struct Edit_Stack{
|
|
u8 *strings;
|
|
i32 size, max;
|
|
|
|
Edit_Step *edits;
|
|
i32 edit_count, edit_max;
|
|
};
|
|
|
|
struct Small_Edit_Stack{
|
|
u8 *strings;
|
|
i32 size, max;
|
|
|
|
Buffer_Edit *edits;
|
|
i32 edit_count, edit_max;
|
|
};
|
|
|
|
struct Undo_Data{
|
|
Edit_Stack undo;
|
|
Edit_Stack redo;
|
|
Edit_Stack history;
|
|
Small_Edit_Stack children;
|
|
|
|
i32 history_block_count, history_head_block;
|
|
i32 edit_history_cursor;
|
|
b32 current_block_normal;
|
|
};
|
|
|
|
#endif
|
|
|
|
// BOTTOM
|