plugin.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "plugin.h"
  2. #include <util/generic/singleton.h>
  3. #include <util/generic/vector.h>
  4. #include <util/generic/utility.h>
  5. namespace NUnitTest {
  6. namespace NPlugin {
  7. namespace {
  8. class TPlugins {
  9. public:
  10. void OnStartMain(int argc, char* argv[]) const {
  11. for (const auto& plugin : Plugins) {
  12. plugin->OnStartMain(argc, argv);
  13. }
  14. }
  15. void OnStopMain(int argc, char* argv[]) const {
  16. for (const auto& plugin : Plugins) {
  17. plugin->OnStopMain(argc, argv);
  18. }
  19. }
  20. void Register(TSimpleSharedPtr<IPlugin> plugin) {
  21. Plugins.emplace_back(std::move(plugin));
  22. }
  23. static TPlugins& Instance() {
  24. return *Singleton<TPlugins>();
  25. }
  26. private:
  27. TVector<TSimpleSharedPtr<IPlugin>> Plugins;
  28. };
  29. } // anonymous namespace
  30. TPluginRegistrator::TPluginRegistrator(TSimpleSharedPtr<IPlugin> plugin) {
  31. TPlugins::Instance().Register(std::move(plugin));
  32. }
  33. void OnStartMain(int argc, char* argv[]) {
  34. TPlugins::Instance().OnStartMain(argc, argv);
  35. }
  36. void OnStopMain(int argc, char* argv[]) {
  37. TPlugins::Instance().OnStopMain(argc, argv);
  38. }
  39. }
  40. }