MaCh3  2.6.1
Reference Guide
plugin.hpp
Go to the documentation of this file.
1 
4 #pragma once
5 #include <memory>
6 #include "CLI/API/m3argparse.hpp"
7 
8 
9 namespace M3 {
10 
16  class IPlugin {
17  public:
18  virtual ~IPlugin() = default;
19 
22  virtual int Run() = 0;
23 
27  };
28 
31  typedef IPlugin IModule;
32 
38  class PluginBase : public IPlugin {
39  public:
40  virtual ~PluginBase() = default;
41 
42  protected:
44  std::unique_ptr<MaCh3ArgumentParser> m_parser;
45  };
46 
47 
48 
52 
53 }
54 
57 extern "C" {
58  typedef M3::IPlugin* (*create_plugin_t)();
59 
62  typedef void (*destroy_plugin_t)(M3::IPlugin*);
63 }
64 
80 #define MACH3_REGISTER_PLUGIN(PluginClass) \
81 static_assert(std::is_base_of<M3::IPlugin, PluginClass>::value, "PluginClass must derive from M3::IPlugin"); \
82 extern "C" M3::IPlugin* create_plugin() { \
83  return new PluginClass(); \
84 } \
85 extern "C" void destroy_plugin(M3::IPlugin* p) { \
86  delete p; \
87 }
Interface for MaCh3 plugins and modules.
Definition: plugin.hpp:16
virtual ~IPlugin()=default
virtual int Run()=0
Execute the plugin's main functionality.
virtual MaCh3ArgumentParser * get_parser()=0
Get the argument parser for this plugin.
Extended ArgumentParser with MaCh3-specific functionality.
Definition: m3argparse.hpp:17
std::unique_ptr< MaCh3ArgumentParser > m_parser
Argument parser for this plugin.
Definition: plugin.hpp:44
virtual ~PluginBase()=default
MaCh3 wrapper for argparse library with additional functionality.
Main namespace for MaCh3 software.
IPlugin IModule
Alias for IPlugin, used for core modules.
Definition: plugin.hpp:31
PluginBase IModuleBase
Alias for IPluginBase, used for core modules.
Definition: plugin.hpp:51
void(* destroy_plugin_t)(M3::IPlugin *)
Function pointer type for plugin destructor function.
Definition: plugin.hpp:62