diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/GFModuleCommonUtils.hpp | 35 | ||||
-rw-r--r-- | include/GFModuleDefine.h | 20 |
2 files changed, 55 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...); diff --git a/include/GFModuleDefine.h b/include/GFModuleDefine.h index 9585140..c36f139 100644 --- a/include/GFModuleDefine.h +++ b/include/GFModuleDefine.h @@ -44,3 +44,23 @@ return QMapToGFModuleMetaDataList( \ {{"Name", (name)}, {"Description", (desc)}, {"Author", (author)}}); \ } + +#define GF_MODULE_API_DEFINE_V2(id, name, ver, desc, author) \ + auto GFGetModuleGFSDKVersion() -> const char* { \ + return DUP(GF_SDK_VERSION_STR); \ + } \ + auto GFGetModuleQtEnvVersion() -> const char* { \ + return DUP(QT_VERSION_STR); \ + } \ + auto GFGetModuleID() -> const char* { return DUP((id)); } \ + auto GFGetModuleVersion() -> const char* { return DUP((ver)); } \ + auto GFGetModuleMetaData() -> GFModuleMetaData* { \ + return QMapToGFModuleMetaDataList( \ + {{"Name", (name)}, {"Description", (desc)}, {"Author", (author)}}); \ + } \ + using MEvent = QMap<QString, QString>; \ + using EventHandler = std::function<int(const MEvent&)>; \ + static QMap<QString, EventHandler> Module##nameEventHandlers; \ + static QMap<QString, EventHandler>& _gr_module_event_handlers = \ + Module##nameEventHandlers; \ + DEFINE_EXECUTE_API_USING_STANDARD_EVEN_HANDLE_MODEL
\ No newline at end of file |