public:
//! \copydoc gmx::CommandLineModuleManager::CMainFunction
typedef CommandLineModuleManager::CMainFunction CMainFunction;
+ //! \copydoc gmx::CommandLineModuleManager::InitSettingsFunction
+ typedef CommandLineModuleManager::InitSettingsFunction InitSettingsFunction;
/*! \brief
* Creates a wrapper module for the given main function.
* \param[in] name Name for the module.
* \param[in] shortDescription One-line description for the module.
* \param[in] mainFunction Main function to wrap.
+ * \param[in] settingsFunction Initializer for settings (can be null).
*
* Does not throw. This is essential for correct implementation of
* CommandLineModuleManager::runAsMainCMain().
*/
CMainCommandLineModule(const char *name, const char *shortDescription,
- CMainFunction mainFunction)
+ CMainFunction mainFunction,
+ InitSettingsFunction settingsFunction)
: name_(name), shortDescription_(shortDescription),
- mainFunction_(mainFunction)
+ mainFunction_(mainFunction), settingsFunction_(settingsFunction)
{
}
return shortDescription_;
}
- virtual void init(CommandLineModuleSettings * /*settings*/)
+ virtual void init(CommandLineModuleSettings *settings)
{
+ if (settingsFunction_ != nullptr)
+ {
+ settingsFunction_(settings);
+ }
}
virtual int run(int argc, char *argv[])
{
const char *name_;
const char *shortDescription_;
CMainFunction mainFunction_;
+ InitSettingsFunction settingsFunction_;
};
//! \}
CMainFunction mainFunction)
{
CommandLineModulePointer module(
- new CMainCommandLineModule(name, shortDescription, mainFunction));
+ new CMainCommandLineModule(name, shortDescription, mainFunction,
+ nullptr));
+ addModule(std::move(module));
+}
+
+void CommandLineModuleManager::addModuleCMainWithSettings(
+ const char *name, const char *shortDescription,
+ CMainFunction mainFunction, InitSettingsFunction settingsFunction)
+{
+ CommandLineModulePointer module(
+ new CMainCommandLineModule(name, shortDescription, mainFunction,
+ settingsFunction));
addModule(std::move(module));
}
int CommandLineModuleManager::runAsMainCMain(
int argc, char *argv[], CMainFunction mainFunction)
{
- CMainCommandLineModule module(argv[0], NULL, mainFunction);
+ CMainCommandLineModule module(argv[0], nullptr, mainFunction, nullptr);
+ return runAsMainSingleModule(argc, argv, &module);
+}
+
+// static
+int CommandLineModuleManager::runAsMainCMainWithSettings(
+ int argc, char *argv[], CMainFunction mainFunction,
+ InitSettingsFunction settingsFunction)
+{
+ CMainCommandLineModule module(argv[0], nullptr, mainFunction, settingsFunction);
return runAsMainSingleModule(argc, argv, &module);
}