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.info = "Hello world command v1.0";
plugin.author = "Axel Kohlmeyer (akohlmey@gmail.com)";
plugin.creator1 = nullptr;
plugin.creator2 = nullptr;
plugin.creator3 = (lammpsplugin_factory3 *) &hellocreator;
plugin.creator.v3 = (lammpsplugin_factory3 *) &hellocreator;
plugin.handle = handle;
(*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.info = "Morse2 variant pair style v1.0";
plugin.author = "Axel Kohlmeyer (akohlmey@gmail.com)";
plugin.creator1 = (lammpsplugin_factory1 *) &morse2creator;
plugin.creator2 = nullptr;
plugin.creator3 = nullptr;
plugin.creator.v1 = (lammpsplugin_factory1 *) &morse2creator;
plugin.handle = handle;
(*register_plugin)(&plugin,lmp);
// also register morse2/omp pair style. only need to update changed fields
plugin.name = "morse2/omp";
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);
}

View File

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

View File

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

View File

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