From b259cb68aa3f76d1e23b47be67d3fbeb6f6b62df Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Thu, 11 Feb 2016 13:09:39 +0100 Subject: optimized command execution in batch mode, during macro calls, loops etc. * SciTECO commands are implemented with immediate execution in mind. Those commands that do need to execute immediately while a string command is entered, can do so using StateExpectString::process(). For simplicity, the parser just assumed that every input character should result in immediate execution (if the command supports it of course). * This lead to unnecessarily slow execution of commands like or in batch mode. E.g. a search was always repeated for every character of the pattern - a N character pattern could result in N searches instead of one. Also in interactive mode when executing a macro or repeating commands in a loop, immediate processing of string arguments is unnecessary and results in superfluous undo tokens. * These cases are all optimized now by being informed about the necessity of providing immediate feedback via State::refresh(). This is used by StateExpectString to defer calling process() as long as possible. * For states extending StateExpectString, there is no change since they can already process arbitrarily long strings. The optimization is hidden in StateExpectString. * some allocations are now also avoided in StateExpectString::custom(). --- TODO | 6 ------ 1 file changed, 6 deletions(-) (limited to 'TODO') diff --git a/TODO b/TODO index 46f4592..1349d4d 100644 --- a/TODO +++ b/TODO @@ -222,12 +222,6 @@ Optimizations: * refactor search commands (create proper base class) * refactor match-char state machine using MicroStateMachine class * simplify parser (static jump tables are unnecessary!) - * search and other commands can be significantly optimized: - in batch mode, or in loops/macros there is no need to rematch every character! - -> immediate vs. non-immediate command execution - * can be handled automatically in StateExpectString - * but it requires to be able to determine whether we're in the - command line macro stack frame and are executing the end of it. Documentation: * Code docs (Doxygen). It's slowly getting better... -- cgit v1.2.3