From db9b113eab32846839c90c6e333e706f5c552bac Mon Sep 17 00:00:00 2001 From: Maschell Date: Sun, 17 May 2020 20:45:10 +0200 Subject: [PATCH] Add PluginDataPersistence --- source/plugin/PluginContainerPersistence.cpp | 16 +++---------- source/plugin/PluginContainerPersistence.h | 2 ++ source/plugin/PluginData.h | 2 +- source/plugin/PluginDataPersistence.cpp | 25 ++++++++++++++++++++ source/plugin/PluginDataPersistence.h | 11 +++++++++ 5 files changed, 42 insertions(+), 14 deletions(-) create mode 100644 source/plugin/PluginDataPersistence.cpp create mode 100644 source/plugin/PluginDataPersistence.h diff --git a/source/plugin/PluginContainerPersistence.cpp b/source/plugin/PluginContainerPersistence.cpp index 262f677..4891916 100644 --- a/source/plugin/PluginContainerPersistence.cpp +++ b/source/plugin/PluginContainerPersistence.cpp @@ -4,19 +4,18 @@ #include "PluginInformationFactory.h" #include "PluginMetaInformationFactory.h" #include "PluginContainerPersistence.h" +#include "PluginDataPersistence.h" #include "DynamicLinkingHelper.h" #include "common/plugin_defines.h" #include "PluginInformation.h" #include "RelocationData.h" bool PluginContainerPersistence::savePlugin(plugin_information_t *pluginInformation, PluginContainer &plugin) { - int32_t plugin_count = pluginInformation->number_used_plugins; auto pluginName = plugin.getMetaInformation().getName(); //auto pluginPath = plugin.getMetaInformation().getPath(); - if (plugin_count >= MAXIMUM_PLUGINS - 1) { DEBUG_FUNCTION_LINE("Maximum of %d plugins reached. %s won't be loaded!\n", MAXIMUM_PLUGINS, pluginName.c_str()); return false; @@ -167,10 +166,7 @@ bool PluginContainerPersistence::savePlugin(plugin_information_t *pluginInformat auto pluginData = plugin.getPluginData(); auto plugin_data_data = &plugin_data->data; - plugin_data_data->buffer = (char *) pluginData.buffer; - plugin_data_data->bufferLength = pluginData.length; - plugin_data_data->memoryType = pluginData.memoryType; - plugin_data_data->heapHandle = (int) pluginData.heapHandle; + PluginDataPersistence::save(plugin_data_data, pluginData); pluginInformation->number_used_plugins++; @@ -209,15 +205,9 @@ std::vector PluginContainerPersistence::loadPlugins(plugin_info metaInformation.setSize(meta->size); metaInformation.setName(meta->name); - PluginData pluginData; - plugin_data_t *data = &(plugin_data->data); - pluginData.buffer = data->buffer; - pluginData.length = data->bufferLength; - pluginData.memoryType = (eMemoryTypes) data->memoryType; - pluginData.heapHandle = (MEMHeapHandle) data->heapHandle; - pluginData.loadReader(); + PluginData pluginData = PluginDataPersistence::load(data); PluginInformation pluginInformation; diff --git a/source/plugin/PluginContainerPersistence.h b/source/plugin/PluginContainerPersistence.h index 361360c..5d6b26e 100644 --- a/source/plugin/PluginContainerPersistence.h +++ b/source/plugin/PluginContainerPersistence.h @@ -8,4 +8,6 @@ public: static bool savePlugin(plugin_information_t *pluginInformation, PluginContainer &plugin); static std::vector loadPlugins(plugin_information_t *pluginInformation); + + static bool savePluginData(plugin_data_t *pluginDataStruct, PluginData &plugin); }; diff --git a/source/plugin/PluginData.h b/source/plugin/PluginData.h index ac4addd..6f26979 100644 --- a/source/plugin/PluginData.h +++ b/source/plugin/PluginData.h @@ -73,5 +73,5 @@ private: friend class PluginContainer; - friend class PluginContainerPersistence; + friend class PluginDataPersistence; }; diff --git a/source/plugin/PluginDataPersistence.cpp b/source/plugin/PluginDataPersistence.cpp new file mode 100644 index 0000000..90c7641 --- /dev/null +++ b/source/plugin/PluginDataPersistence.cpp @@ -0,0 +1,25 @@ +#include +#include "PluginDataPersistence.h" +#include "PluginData.h" + +bool PluginDataPersistence::save(plugin_data_t *pluginDataStruct, PluginData &plugin) { + if(pluginDataStruct == NULL){ + return false; + } + pluginDataStruct->buffer = (char *) plugin.buffer; + pluginDataStruct->bufferLength = plugin.length; + pluginDataStruct->memoryType = plugin.memoryType; + pluginDataStruct->heapHandle = (int) plugin.heapHandle; + return true; +} + +PluginData PluginDataPersistence::load(plugin_data_t *pluginDataStruct) { + PluginData pluginData; + + pluginData.buffer = pluginDataStruct->buffer; + pluginData.length = pluginDataStruct->bufferLength; + pluginData.memoryType = (eMemoryTypes) pluginDataStruct->memoryType; + pluginData.heapHandle = (MEMHeapHandle) pluginDataStruct->heapHandle; + pluginData.loadReader(); + return pluginData; +} \ No newline at end of file diff --git a/source/plugin/PluginDataPersistence.h b/source/plugin/PluginDataPersistence.h new file mode 100644 index 0000000..c5ad370 --- /dev/null +++ b/source/plugin/PluginDataPersistence.h @@ -0,0 +1,11 @@ +#pragma once + +#include "PluginData.h" + +class PluginDataPersistence { + +public: + static bool save(plugin_data_t *pluginDataStruct, PluginData &plugin); + + static PluginData load(plugin_data_t *pluginDataStruct); +};