diff options
author | saturneric <[email protected]> | 2023-10-16 16:38:40 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2023-10-16 16:38:40 +0000 |
commit | ea098a6bb8daef7b93c3b1703c22abf39cb800bd (patch) | |
tree | 81ce551a3d82013dfb17fa18cd1e5ede20839cbe /src/core/thread/Task.h | |
parent | fix: check and update copyright at files (diff) | |
download | GpgFrontend-ea098a6bb8daef7b93c3b1703c22abf39cb800bd.tar.gz GpgFrontend-ea098a6bb8daef7b93c3b1703c22abf39cb800bd.zip |
feat: using piml tech on plugin system
Diffstat (limited to 'src/core/thread/Task.h')
-rw-r--r-- | src/core/thread/Task.h | 110 |
1 files changed, 2 insertions, 108 deletions
diff --git a/src/core/thread/Task.h b/src/core/thread/Task.h index e6a56219..2e812c3f 100644 --- a/src/core/thread/Task.h +++ b/src/core/thread/Task.h @@ -55,114 +55,6 @@ class GPGFRONTEND_CORE_EXPORT Task : public QObject, public QRunnable { friend class TaskRunner; /** - * @brief DataObject to be passed to the callback function. - * - */ - class GPGFRONTEND_CORE_EXPORT DataObject { - public: - struct Destructor { - const void *p_obj; - void (*destroy)(const void *); - }; - - /** - * @brief Get the Objects Size - * - * @return size_t - */ - size_t GetObjectSize(); - - /** - * @brief - * - * @tparam T - * @param ptr - */ - template <typename T> - void AppendObject(T &&obj) { - SPDLOG_TRACE("append object: {}", static_cast<void *>(this)); - auto *obj_dstr = this->get_heap_ptr(sizeof(T)); - new ((void *)obj_dstr->p_obj) T(std::forward<T>(obj)); - - if (std::is_class_v<T>) { - auto destructor = [](const void *x) { - static_cast<const T *>(x)->~T(); - }; - obj_dstr->destroy = destructor; - } else { - obj_dstr->destroy = nullptr; - } - - data_objects_.push(obj_dstr); - } - - /** - * @brief - * - * @tparam T - * @param ptr - */ - template <typename T> - void AppendObject(T *obj) { - SPDLOG_TRACE("called: {}", static_cast<void *>(this)); - auto *obj_dstr = this->get_heap_ptr(sizeof(T)); - auto *ptr_heap = new ((void *)obj_dstr->p_obj) T(std::move(*obj)); - if (std::is_class_v<T>) { - SPDLOG_TRACE("is class"); - auto destructor = [](const void *x) { - static_cast<const T *>(x)->~T(); - }; - obj_dstr->destroy = destructor; - } else { - obj_dstr->destroy = nullptr; - } - data_objects_.push(std::move(obj_dstr)); - } - - /** - * @brief - * - * @tparam T - * @return std::shared_ptr<T> - */ - template <typename T> - T PopObject() { - SPDLOG_TRACE("pop object: {}", static_cast<void *>(this)); - if (data_objects_.empty()) throw std::runtime_error("No object to pop"); - auto *obj_dstr = data_objects_.top(); - auto *heap_ptr = (T *)obj_dstr->p_obj; - auto obj = std::move(*(T *)(heap_ptr)); - this->free_heap_ptr(obj_dstr); - data_objects_.pop(); - return obj; - } - - /** - * @brief Destroy the Data Object object - * - */ - ~DataObject(); - - private: - std::stack<Destructor *> data_objects_; ///< - - /** - * @brief Get the heap ptr object - * - * @param bytes_size - * @return void* - */ - Destructor *get_heap_ptr(size_t bytes_size); - - /** - * @brief - * - * @param heap_ptr - */ - void free_heap_ptr(Destructor *); - }; - - /** * @brief Construct a new Task object * */ @@ -256,6 +148,8 @@ class GPGFRONTEND_CORE_EXPORT Task : public QObject, public QRunnable { void SetRTN(int rtn); private: + class Impl; + std::unique_ptr<Impl>; const std::string uuid_; const std::string name_; const bool sequency_ = true; ///< must run in the same thread |