diff options
Diffstat (limited to 'include/GFModuleCommonUtils.hpp')
-rw-r--r-- | include/GFModuleCommonUtils.hpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/include/GFModuleCommonUtils.hpp b/include/GFModuleCommonUtils.hpp index d64f203..1811ffc 100644 --- a/include/GFModuleCommonUtils.hpp +++ b/include/GFModuleCommonUtils.hpp @@ -94,6 +94,23 @@ return ret; \ } +#define DEFINE_EXECUTE_API_USING_STANDARD_EVEN_HANDLE_MODEL \ + EXECUTE_MODULE() { \ + auto event_id = event["event_id"]; \ + auto it = _gr_module_event_handlers.find(event_id); \ + if (it != _gr_module_event_handlers.end()) { \ + return it.value()(event); \ + } \ + CB_ERR(event, -1, QString("unsupported event id: %1").arg(event_id)); \ + } \ + END_EXECUTE_MODULE() + +#define REGISTER_EVENT_HANDLER(event_id, handler) \ + static const bool _gv_register_event_handler_by_id_##event_id = [] { \ + _gr_module_event_handlers[#event_id] = handler; \ + return true; \ + }(); + inline void MLogDebug(const QString& s) { GFModuleLogDebug(s.toUtf8()); } inline void MLogInfo(const QString& s) { GFModuleLogInfo(s.toUtf8()); } inline void MLogWarn(const QString& s) { GFModuleLogWarn(s.toUtf8()); } @@ -121,11 +138,22 @@ inline auto UnStrDup(const char* s) -> QString { return q_s; } +inline auto FormatStringHelper(const QString& format, + const std::string& arg) -> QString { + return format.arg(QString::fromStdString(arg)); +} + template <typename T> auto FormatStringHelper(const QString& format, T arg) -> QString { return format.arg(arg); } +template <typename... Args> +auto FormatStringHelper(const QString& format, const std::string& arg, + Args... args) -> QString { + return FormatStringHelper(format.arg(QString::fromStdString(arg)), args...); +} + template <typename T, typename... Args> auto FormatStringHelper(const QString& format, T arg, Args... args) -> QString { return FormatStringHelper(format.arg(arg), args...); @@ -135,6 +163,13 @@ inline auto FormatStringHelper(const QString& format) -> QString { return format; } +template <typename T> +inline auto FormatStringHelper(const T& format) -> + typename std::enable_if<std::is_same<T, std::string>::value, + QString>::type { + return FormatStringHelper(QString::fromStdString(format)); +} + template <typename... Args> auto FormatString(const QString& format, Args... args) -> QString { return FormatStringHelper(format, args...); |