store different factory variants in a union

This commit is contained in:
Axel Kohlmeyer
2021-03-11 23:52:35 -05:00
parent 524c62994e
commit d95d5f1954
5 changed files with 12 additions and 16 deletions

View File

@ -41,9 +41,7 @@ extern "C" void lammpsplugin_init(void *lmp, void *handle, void *regfunc)
plugin.name = "hello"; plugin.name = "hello";
plugin.info = "Hello world command v1.0"; plugin.info = "Hello world command v1.0";
plugin.author = "Axel Kohlmeyer (akohlmey@gmail.com)"; plugin.author = "Axel Kohlmeyer (akohlmey@gmail.com)";
plugin.creator1 = nullptr; plugin.creator.v3 = (lammpsplugin_factory3 *) &hellocreator;
plugin.creator2 = nullptr;
plugin.creator3 = (lammpsplugin_factory3 *) &hellocreator;
plugin.handle = handle; plugin.handle = handle;
(*register_plugin)(&plugin,lmp); (*register_plugin)(&plugin,lmp);
} }

View File

@ -31,15 +31,13 @@ extern "C" void lammpsplugin_init(void *lmp, void *handle, void *regfunc)
plugin.name = "morse2"; plugin.name = "morse2";
plugin.info = "Morse2 variant pair style v1.0"; plugin.info = "Morse2 variant pair style v1.0";
plugin.author = "Axel Kohlmeyer (akohlmey@gmail.com)"; plugin.author = "Axel Kohlmeyer (akohlmey@gmail.com)";
plugin.creator1 = (lammpsplugin_factory1 *) &morse2creator; plugin.creator.v1 = (lammpsplugin_factory1 *) &morse2creator;
plugin.creator2 = nullptr;
plugin.creator3 = nullptr;
plugin.handle = handle; plugin.handle = handle;
(*register_plugin)(&plugin,lmp); (*register_plugin)(&plugin,lmp);
// also register morse2/omp pair style. only need to update changed fields // also register morse2/omp pair style. only need to update changed fields
plugin.name = "morse2/omp"; plugin.name = "morse2/omp";
plugin.info = "Morse2 variant pair style for OpenMP v1.0"; plugin.info = "Morse2 variant pair style for OpenMP v1.0";
plugin.creator1 = (lammpsplugin_factory1 *) &morse2ompcreator; plugin.creator.v1 = (lammpsplugin_factory1 *) &morse2ompcreator;
(*register_plugin)(&plugin,lmp); (*register_plugin)(&plugin,lmp);
} }

View File

@ -24,9 +24,7 @@ extern "C" void lammpsplugin_init(void *lmp, void *handle, void *regfunc)
plugin.name = "nve2"; plugin.name = "nve2";
plugin.info = "NVE2 variant fix style v1.0"; plugin.info = "NVE2 variant fix style v1.0";
plugin.author = "Axel Kohlmeyer (akohlmey@gmail.com)"; plugin.author = "Axel Kohlmeyer (akohlmey@gmail.com)";
plugin.creator1 = nullptr; plugin.creator.v2 = (lammpsplugin_factory2 *) &nve2creator;
plugin.creator2 = (lammpsplugin_factory2 *) &nve2creator;
plugin.creator3 = nullptr;
plugin.handle = handle; plugin.handle = handle;
(*register_plugin)(&plugin,lmp); (*register_plugin)(&plugin,lmp);
} }

View File

@ -28,9 +28,11 @@ extern "C" {
const char *name; const char *name;
const char *info; const char *info;
const char *author; const char *author;
lammpsplugin_factory1 *creator1; union {
lammpsplugin_factory2 *creator2; lammpsplugin_factory1 *v1;
lammpsplugin_factory3 *creator3; lammpsplugin_factory2 *v2;
lammpsplugin_factory3 *v3;
} creator;
void *handle; void *handle;
} lammpsplugin_t; } lammpsplugin_t;

View File

@ -129,7 +129,7 @@ namespace LAMMPS_NS
"style {} from plugin", "style {} from plugin",
plugin->name)); plugin->name));
} }
(*pair_map)[plugin->name] = (Force::PairCreator)plugin->creator1; (*pair_map)[plugin->name] = (Force::PairCreator)plugin->creator.v1;
} else if (pstyle == "fix") { } else if (pstyle == "fix") {
auto fix_map = lmp->modify->fix_map; auto fix_map = lmp->modify->fix_map;
@ -139,7 +139,7 @@ namespace LAMMPS_NS
"style {} from plugin", "style {} from plugin",
plugin->name)); plugin->name));
} }
(*fix_map)[plugin->name] = (Modify::FixCreator)plugin->creator2; (*fix_map)[plugin->name] = (Modify::FixCreator)plugin->creator.v2;
} else if (pstyle == "command") { } else if (pstyle == "command") {
auto command_map = lmp->input->command_map; auto command_map = lmp->input->command_map;
@ -149,7 +149,7 @@ namespace LAMMPS_NS
"style {} from plugin", "style {} from plugin",
plugin->name)); plugin->name));
} }
(*command_map)[plugin->name] = (Input::CommandCreator)plugin->creator3; (*command_map)[plugin->name] = (Input::CommandCreator)plugin->creator.v3;
} else { } else {
utils::logmesg(lmp,fmt::format("Loading plugin for {} styles not " utils::logmesg(lmp,fmt::format("Loading plugin for {} styles not "