diff options
| author | Matthias Melcher <github@matthiasm.com> | 2023-10-26 23:31:12 +0200 |
|---|---|---|
| committer | Matthias Melcher <github@matthiasm.com> | 2023-10-26 23:31:29 +0200 |
| commit | 0b408792c083eb64a5ca737bdbcb30b1d64042e9 (patch) | |
| tree | 51b791729ea8be5bb741088cba12c24a9c4034c5 /fluid/mergeback.h | |
| parent | 8663b867497de6d370b9c8376c4bdfc909744663 (diff) | |
FLUID: Refactors MergeBack
* moved functionality into its own files
* refactored all methods to be less than a page
* documented all calls
* tested all situations I could think of
Diffstat (limited to 'fluid/mergeback.h')
| -rw-r--r-- | fluid/mergeback.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/fluid/mergeback.h b/fluid/mergeback.h new file mode 100644 index 000000000..28b5ea50d --- /dev/null +++ b/fluid/mergeback.h @@ -0,0 +1,77 @@ +// +// MergeBack routines for the Fast Light Tool Kit (FLTK). +// +// Copyright 2023 by Bill Spitzak and others. +// +// This library is free software. Distribution and use rights are outlined in +// the file "COPYING" which should have been included with this file. If this +// file is missing or damaged, see the license at: +// +// https://www.fltk.org/COPYING.php +// +// Please see the following page on how to report bugs and issues: +// +// https://www.fltk.org/bugs.php +// + +#ifndef _FLUID_MERGEBACK_H +#define _FLUID_MERGEBACK_H + +#include <FL/fl_attr.h> + +#include "../src/Fl_String.H" + +#include <stdio.h> + +const int FD_TAG_GENERIC = 0; +const int FD_TAG_CODE = 1; +const int FD_TAG_MENU_CALLBACK = 2; +const int FD_TAG_WIDGET_CALLBACK = 3; +const int FD_TAG_LAST = 3; + +const int FD_MERGEBACK_ANALYSE = 0; +const int FD_MERGEBACK_INTERACTIVE = 1; +const int FD_MERGEBACK_APPLY = 2; +const int FD_MERGEBACK_APPLY_IF_SAFE = 3; + +/** Class that implements the MergeBack functionality. + \see merge_back(const Fl_String &s, int task) + */ +class Fd_Mergeback +{ +protected: + /// Pointer to the C++ code file. + FILE *code; + /// Current line number in the C++ code file. + int line_no; + /// Set if there was an error reading a tag. + int tag_error; + /// Number of code blocks that were different than the CRC in their tag. + int num_changed_code; + /// Number of generic structure blocks that were different than the CRC in their tag. + int num_changed_structure; + /// Number of code block that were modified, but a type node by that uid was not found. + int num_uid_not_found; + /// Number of modified code block where the corresponding project block also changed. + int num_possible_override; + + void unindent(char *s); + Fl_String read_and_unindent_block(long start, long end); + void analyse_callback(unsigned long code_crc, unsigned long tag_crc, int uid); + void analyse_code(unsigned long code_crc, unsigned long tag_crc, int uid); + int apply_callback(long block_end, long block_start, unsigned long code_crc, int uid); + int apply_code(long block_end, long block_start, unsigned long code_crc, int uid); + +public: + Fd_Mergeback(); + ~Fd_Mergeback(); + int merge_back(const Fl_String &s, int task); + int ask_user_to_merge(); + int analyse(); + int apply(); +}; + +extern int merge_back(const Fl_String &s, int task); + + +#endif // _FLUID_MERGEBACK_H |
