diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2014-11-16 19:31:29 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2014-11-16 23:34:25 +0100 |
commit | 38fcf6d15cdf09591e7d7a142ad724164875e433 (patch) | |
tree | bc6d81a5c3e33b6832cf0507fbf7e9e4a01a4358 /src/interface.cpp | |
parent | 7a0857515ad216325fc3021c7490df9d01a21c7c (diff) | |
download | sciteco-38fcf6d15cdf09591e7d7a142ad724164875e433.tar.gz |
rewritten View and Interface base classes using the Curiously Recurring Template Pattern.
* without the one-view-per-buffer designs, many Scintilla send message (SSM)
calls could be inlined
* with the new design, this was no longer possible using the abstract
base classes. the CRT pattern allows inlining again but introduces
a strange level of code obscurity.
* tests suggest that at high optimization levels, the one-view-per-buffer
design and the CRT pattern reduces typical macro runtimes by 30%
(e.g. for symbols-extract.tes).
* only updated the NCurses UI for the time being
Diffstat (limited to 'src/interface.cpp')
-rw-r--r-- | src/interface.cpp | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/interface.cpp b/src/interface.cpp index aecba4e..fcb1738 100644 --- a/src/interface.cpp +++ b/src/interface.cpp @@ -34,8 +34,9 @@ namespace SciTECO { +template <class ViewImpl> void -View::set_representations(void) +View<ViewImpl>::set_representations(void) { static const char *reps[] = { "^@", "^A", "^B", "^C", "^D", "^E", "^F", "^G", @@ -50,8 +51,9 @@ View::set_representations(void) } } +template <class ViewImpl> void -View::initialize(void) +View<ViewImpl>::initialize(void) { ssm(SCI_SETFOCUS, TRUE); @@ -70,8 +72,11 @@ View::initialize(void) ssm(SCI_STYLESETBACK, STYLE_LINENUMBER, 0x000000); } +template class View<ViewCurrent>; + +template <class InterfaceImpl, class ViewImpl> void -Interface::UndoTokenShowView::run(void) +Interface<InterfaceImpl, ViewImpl>::UndoTokenShowView::run(void) { /* * Implementing this here allows us to reference @@ -80,8 +85,17 @@ Interface::UndoTokenShowView::run(void) interface.show_view(view); } +template <class InterfaceImpl, class ViewImpl> +template <class Type> +void +Interface<InterfaceImpl, ViewImpl>::UndoTokenInfoUpdate<Type>::run(void) +{ + interface.info_update(obj); +} + +template <class InterfaceImpl, class ViewImpl> void -Interface::stdio_vmsg(MessageType type, const gchar *fmt, va_list ap) +Interface<InterfaceImpl, ViewImpl>::stdio_vmsg(MessageType type, const gchar *fmt, va_list ap) { gchar buf[255]; @@ -103,12 +117,15 @@ Interface::stdio_vmsg(MessageType type, const gchar *fmt, va_list ap) } } +template <class InterfaceImpl, class ViewImpl> void -Interface::process_notify(SCNotification *notify) +Interface<InterfaceImpl, ViewImpl>::process_notify(SCNotification *notify) { #ifdef DEBUG g_printf("SCINTILLA NOTIFY: code=%d\n", notify->nmhdr.code); #endif } +template class Interface<InterfaceCurrent, ViewCurrent>; + } /* namespace SciTECO */ |