aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/interface.cpp
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2014-11-16 19:31:29 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2014-11-16 23:34:25 +0100
commit38fcf6d15cdf09591e7d7a142ad724164875e433 (patch)
treebc6d81a5c3e33b6832cf0507fbf7e9e4a01a4358 /src/interface.cpp
parent7a0857515ad216325fc3021c7490df9d01a21c7c (diff)
downloadsciteco-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.cpp27
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 */