add argc, argv to mana plugin init

This commit is contained in:
Florian Lüke 2024-12-27 14:38:12 +01:00
parent 81023bbde2
commit f5fc1d49e7
4 changed files with 17 additions and 5 deletions

View file

@ -286,7 +286,7 @@ struct ManaCountingSink: public IManaSink
totalBytes = 0; totalBytes = 0;
} }
void init() override {} void init(int, const char **) override {}
void shutdown() override {} void shutdown() override {}
void begin_run(const char *descriptor_json) override void begin_run(const char *descriptor_json) override
{ {

View file

@ -33,7 +33,7 @@ extern "C"
size_t size_bytes; size_t size_bytes;
} mana_offset_array_t; } mana_offset_array_t;
#define MANA_DEFINE_PLUGIN_INIT(name) void *name() #define MANA_DEFINE_PLUGIN_INIT(name) void *name(int plugin_argc, const char **plugin_argv)
#define MANA_DEFINE_PLUGIN_SHUTDOWN(name) void name(void *context) #define MANA_DEFINE_PLUGIN_SHUTDOWN(name) void name(void *context)

View file

@ -5,6 +5,7 @@
#include "mana_c_api.h" #include "mana_c_api.h"
#include <cassert> #include <cassert>
#include <mesytec-mnode/mnode_cpp_types.h> #include <mesytec-mnode/mnode_cpp_types.h>
#include <mesytec-mnode/mnode_string.hpp>
#include <mesytec-mvlc/cpp_compat.h> #include <mesytec-mvlc/cpp_compat.h>
#include <mesytec-mvlc/util/data_filter.h> #include <mesytec-mvlc/util/data_filter.h>
#include <nlohmann/json.hpp> #include <nlohmann/json.hpp>
@ -131,7 +132,7 @@ class IManaSink
public: public:
virtual ~IManaSink() = default; virtual ~IManaSink() = default;
virtual void init() = 0; virtual void init(int plugin_argc, const char **plugin_argv) = 0;
virtual void shutdown() = 0; virtual void shutdown() = 0;
virtual void begin_run(const char *descriptor_json) = 0; virtual void begin_run(const char *descriptor_json) = 0;
virtual void end_run(const char *descriptor_json) = 0; virtual void end_run(const char *descriptor_json) = 0;
@ -140,6 +141,14 @@ class IManaSink
virtual void process_system_event(const uint32_t *data, size_t size) = 0; virtual void process_system_event(const uint32_t *data, size_t size) = 0;
template <typename StringHolder> void init(StringHolder args)
{
std::vector<const char *> cargs(args.size());
std::transform(args.begin(), args.end(), cargs.begin(),
[](const std::string &s) { return s.c_str(); });
init(cargs.size(), cargs.data());
}
protected: protected:
IManaSink() = default; IManaSink() = default;
@ -159,7 +168,10 @@ struct ManaCSink: public IManaSink
{ {
} }
void init() override { context_ = plugin_.init(); } void init(int plugin_argc, const char **plugin_argv) override
{
context_ = plugin_.init(plugin_argc, plugin_argv);
}
void shutdown() override { plugin_.shutdown(context_); } void shutdown() override { plugin_.shutdown(context_); }
void begin_run(const char *descriptor_json) override void begin_run(const char *descriptor_json) override
{ {

View file

@ -481,7 +481,7 @@ int main(int argc, char *argv[])
// make the analysis instance available to the parser callbacks // make the analysis instance available to the parser callbacks
parserContext->parser.userContext = &mana; parserContext->parser.userContext = &mana;
mana.sink->init(); mana.sink->init(0, nullptr);
mana.sink->begin_run(mana.runDescriptor.dump().c_str()); mana.sink->begin_run(mana.runDescriptor.dump().c_str());
strategy->run(*listfileContext, *parserContext); strategy->run(*listfileContext, *parserContext);