aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorsaturneric <[email protected]>2024-07-24 14:02:49 +0000
committersaturneric <[email protected]>2024-07-24 14:02:49 +0000
commit46b7ecec8f5787d3a4b14a2fd2ec4f324a041345 (patch)
tree0704d13add7c2b1957b832f42a817df827a39b9a /include
parentfix: metadata is not translated (diff)
downloadModules-46b7ecec8f5787d3a4b14a2fd2ec4f324a041345.tar.gz
Modules-46b7ecec8f5787d3a4b14a2fd2ec4f324a041345.zip
feat: move in GnuPGTab
Diffstat (limited to 'include')
-rw-r--r--include/GFModuleCommonUtils.hpp45
1 files changed, 42 insertions, 3 deletions
diff --git a/include/GFModuleCommonUtils.hpp b/include/GFModuleCommonUtils.hpp
index c318a1c..a300ddc 100644
--- a/include/GFModuleCommonUtils.hpp
+++ b/include/GFModuleCommonUtils.hpp
@@ -39,6 +39,8 @@
#include "GFSDKModule.h"
#define DUP(v) GFModuleStrDup(v)
+#define UDUP(v) UnStrDup(v)
+#define QDUP(v) QStrDup(v)
inline void MLogDebug(const QString& s) { GFModuleLogDebug(s.toUtf8()); }
inline void MLogInfo(const QString& s) { GFModuleLogInfo(s.toUtf8()); }
@@ -52,7 +54,16 @@ inline void MLogError(const QString& s) { GFModuleLogError(s.toUtf8()); }
#define MLogErrorS(format, ...) \
MLogError(QString::asprintf(format, __VA_ARGS__))
-auto QMapToMetaDataArray(const QMap<QString, QString>& map) -> MetaData** {
+inline auto QStrDup(QString str) -> char* { return DUP(str.toUtf8()); }
+
+inline auto UnStrDup(const char* src) -> QString {
+ auto qt_str = QString::fromUtf8(src);
+ GFFreeMemory(static_cast<void*>(const_cast<char*>(src)));
+ return qt_str;
+}
+
+inline auto QMapToMetaDataArray(const QMap<QString, QString>& map)
+ -> MetaData** {
auto** meta_data_array =
static_cast<MetaData**>(GFAllocateMemory(sizeof(MetaData*) * map.size()));
@@ -74,7 +85,7 @@ auto QMapToMetaDataArray(const QMap<QString, QString>& map) -> MetaData** {
return meta_data_array;
}
-auto QMapToGFModuleMetaDataList(const QMap<QString, QString>& map)
+inline auto QMapToGFModuleMetaDataList(const QMap<QString, QString>& map)
-> GFModuleMetaData* {
GFModuleMetaData* head = nullptr;
GFModuleMetaData* tail = nullptr;
@@ -105,8 +116,36 @@ auto QMapToGFModuleMetaDataList(const QMap<QString, QString>& map)
return head;
}
-auto AllocBufferAndCopy(const QByteArray& b) -> char* {
+inline auto AllocBufferAndCopy(const QByteArray& b) -> char* {
auto* p = static_cast<char*>(GFAllocateMemory(sizeof(char) * b.size()));
memcpy(p, b.constData(), b.size());
return p;
}
+
+template <typename T, typename... Args>
+auto SecureCreateSharedObject(Args&&... args) -> std::shared_ptr<T> {
+ void* mem = GFAllocateMemory(sizeof(T));
+ if (!mem) throw std::bad_alloc();
+
+ try {
+ T* obj = new (mem) T(std::forward<Args>(args)...);
+ return std::shared_ptr<T>(obj, [](T* ptr) {
+ ptr->~T();
+ GFFreeMemory(ptr);
+ });
+ } catch (...) {
+ GFFreeMemory(mem);
+ throw;
+ }
+}
+
+inline auto CharArrayToQStringList(char** pl_components, int size)
+ -> QStringList {
+ QStringList list;
+ for (int i = 0; i < size; ++i) {
+ list.append(QString::fromUtf8(pl_components[i]));
+ GFFreeMemory(pl_components[i]);
+ }
+ GFFreeMemory(pl_components);
+ return list;
+} \ No newline at end of file