From 0d499dd125d97061e120187fd59d00c18d77b198 Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Sat, 29 Oct 2016 19:35:48 +0200 Subject: degesch: avoid senseless indirection in hooks It's always been one function call only this far. --- degesch.c | 60 ++++++++---------------------------------------------------- 1 file changed, 8 insertions(+), 52 deletions(-) diff --git a/degesch.c b/degesch.c index 1aff24b..62d47d7 100644 --- a/degesch.c +++ b/degesch.c @@ -1954,43 +1954,27 @@ hook_insert (struct hook *list, struct hook *item) struct input_hook { struct hook super; ///< Common hook fields - struct input_hook_vtable *vtable; ///< Methods -}; -struct input_hook_vtable -{ /// Takes over the ownership of "input", returns either NULL if input /// was thrown away, or a possibly modified version of it char *(*filter) (struct input_hook *self, struct buffer *buffer, char *input); }; -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - struct irc_hook { struct hook super; ///< Common hook fields - struct irc_hook_vtable *vtable; ///< Methods -}; -struct irc_hook_vtable -{ /// Takes over the ownership of "message", returns either NULL if message /// was thrown away, or a possibly modified version of it char *(*filter) (struct irc_hook *self, struct server *server, char *message); }; -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - struct prompt_hook { struct hook super; ///< Common hook fields - struct prompt_hook_vtable *vtable; ///< Methods -}; -struct prompt_hook_vtable -{ /// Returns what the prompt should look like right now based on other state char *(*make) (struct prompt_hook *self); }; @@ -2017,11 +2001,7 @@ struct completion struct completion_hook { struct hook super; ///< Common hook fields - struct completion_hook_vtable *vtable; -}; -struct completion_hook_vtable -{ /// Tries to add possible completions of "word" to "output" void (*complete) (struct completion_hook *self, struct completion *data, const char *word, struct str_vector *output); @@ -5044,7 +5024,7 @@ irc_process_hooks (struct server *s, char *input) LIST_FOR_EACH (struct hook, iter, s->ctx->irc_hooks) { struct irc_hook *hook = (struct irc_hook *) iter; - if (!(input = hook->vtable->filter (hook, s, input))) + if (!(input = hook->filter (hook, s, input))) { log_server_debug (s, "#a>= #s#r", ATTR_JOIN, "thrown away by hook"); return NULL; @@ -5908,7 +5888,7 @@ make_prompt (struct app_context *ctx, struct str *output) LIST_FOR_EACH (struct hook, iter, ctx->prompt_hooks) { struct prompt_hook *hook = (struct prompt_hook *) iter; - char *made = hook->vtable->make (hook); + char *made = hook->make (hook); if (made) { str_append (output, made); @@ -8873,13 +8853,6 @@ lua_input_hook_filter (struct input_hook *self, struct buffer *buffer, return input; } -struct input_hook_vtable lua_input_hook_vtable = -{ - .filter = lua_input_hook_filter, -}; - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - static char * lua_irc_hook_filter (struct irc_hook *self, struct server *s, char *message) { @@ -8904,13 +8877,6 @@ lua_irc_hook_filter (struct irc_hook *self, struct server *s, char *message) return message; } -struct irc_hook_vtable lua_irc_hook_vtable = -{ - .filter = lua_irc_hook_filter, -}; - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - static char * lua_prompt_hook_make (struct prompt_hook *self) { @@ -8934,11 +8900,6 @@ lua_prompt_hook_make (struct prompt_hook *self) return prompt; } -struct prompt_hook_vtable lua_prompt_hook_vtable = -{ - .make = lua_prompt_hook_make, -}; - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - static void @@ -9026,11 +8987,6 @@ lua_completion_hook_complete (struct completion_hook *self, lua_plugin_log_error (plugin, "autocomplete hook", e); } -struct completion_hook_vtable lua_completion_hook_vtable = -{ - .complete = lua_completion_hook_complete, -}; - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - static void @@ -9081,7 +9037,7 @@ lua_plugin_hook_input (lua_State *L) struct lua_plugin *plugin = lua_touserdata (L, lua_upvalueindex (1)); struct lua_hook *hook = lua_plugin_push_hook (plugin, 1, XLUA_HOOK_INPUT, luaL_optinteger (L, 2, 0)); - hook->data.input_hook.vtable = &lua_input_hook_vtable; + hook->data.input_hook.filter = lua_input_hook_filter; plugin->ctx->input_hooks = hook_insert (plugin->ctx->input_hooks, &hook->data.hook); return 1; @@ -9093,7 +9049,7 @@ lua_plugin_hook_irc (lua_State *L) struct lua_plugin *plugin = lua_touserdata (L, lua_upvalueindex (1)); struct lua_hook *hook = lua_plugin_push_hook (plugin, 1, XLUA_HOOK_IRC, luaL_optinteger (L, 2, 0)); - hook->data.irc_hook.vtable = &lua_irc_hook_vtable; + hook->data.irc_hook.filter = lua_irc_hook_filter; plugin->ctx->irc_hooks = hook_insert (plugin->ctx->irc_hooks, &hook->data.hook); return 1; @@ -9105,7 +9061,7 @@ lua_plugin_hook_prompt (lua_State *L) struct lua_plugin *plugin = lua_touserdata (L, lua_upvalueindex (1)); struct lua_hook *hook = lua_plugin_push_hook (plugin, 1, XLUA_HOOK_PROMPT, luaL_optinteger (L, 2, 0)); - hook->data.prompt_hook.vtable = &lua_prompt_hook_vtable; + hook->data.prompt_hook.make = lua_prompt_hook_make; plugin->ctx->prompt_hooks = hook_insert (plugin->ctx->prompt_hooks, &hook->data.hook); refresh_prompt (plugin->ctx); @@ -9118,7 +9074,7 @@ lua_plugin_hook_completion (lua_State *L) struct lua_plugin *plugin = lua_touserdata (L, lua_upvalueindex (1)); struct lua_hook *hook = lua_plugin_push_hook (plugin, 1, XLUA_HOOK_COMPLETION, luaL_optinteger (L, 2, 0)); - hook->data.c_hook.vtable = &lua_completion_hook_vtable; + hook->data.c_hook.complete = lua_completion_hook_complete; plugin->ctx->completion_hooks = hook_insert (plugin->ctx->completion_hooks, &hook->data.hook); return 1; @@ -11888,7 +11844,7 @@ process_input_hooks (struct app_context *ctx, struct buffer *buffer, LIST_FOR_EACH (struct hook, iter, ctx->input_hooks) { struct input_hook *hook = (struct input_hook *) iter; - if (!(input = hook->vtable->filter (hook, buffer, input))) + if (!(input = hook->filter (hook, buffer, input))) { log_global_debug (ctx, "Input thrown away by hook"); return NULL; @@ -12186,7 +12142,7 @@ complete_word (struct app_context *ctx, struct completion *data, LIST_FOR_EACH (struct hook, iter, ctx->completion_hooks) { struct completion_hook *hook = (struct completion_hook *) iter; - hook->vtable->complete (hook, data, word, &words); + hook->complete (hook, data, word, &words); } if (words.len == 1) -- cgit v1.2.3-70-g09d2