25#ifndef MYSQL_HARNESS_DIMANAGER_INCLUDED
26#define MYSQL_HARNESS_DIMANAGER_INCLUDED
28#include "harness_export.h"
364class RandomGeneratorInterface;
390 static DIM &instance();
406 factory_LoggingRegistry_ = factory;
407 deleter_LoggingRegistry_ = deleter;
414 factory_MySQLSession_ = factory;
415 deleter_MySQLSession_ = deleter;
424 factory_RandomGenerator_ = factory;
425 deleter_RandomGenerator_ = deleter;
433 factory_Config_ = factory;
434 deleter_Config_ = deleter;
442 factory_DynamicState_ = factory;
443 deleter_DynamicState_ = deleter;
452 return get_external_generic(instance_LoggingRegistry_,
453 factory_LoggingRegistry_,
454 deleter_LoggingRegistry_);
459 return get_generic(factory_RandomGenerator_, deleter_RandomGenerator_);
464 return get_external_generic(instance_Config_, factory_Config_,
471 return get_external_generic(instance_DynamicState_, factory_DynamicState_,
472 deleter_DynamicState_);
481 return new_generic(factory_MySQLSession_, deleter_MySQLSession_);
491 factory_LoggingRegistry_;
502 factory_RandomGenerator_;
521 template <
typename T>
523 const std::function<
void(T *)> &deleter) {
524 static UniquePtr<T> obj = new_generic(factory, deleter);
530 template <
typename T>
532 const std::function<
void(T *)> &deleter) {
540 template <
typename T,
typename A1>
542 const std::function<
void(T *)> &deleter,
551 template <
typename T,
typename A1,
typename A2>
553 const std::function<
void(T *)> &deleter,
554 const A1 &a1,
const A2 &a2) {
563 template <
typename T>
565 const std::function<T *()> &factory,
566 const std::function<
void(T *)> &deleter) {
568 std::shared_ptr<void> exit_trigger(
nullptr, [&](
void *) { mtx_.unlock(); });
570 if (!
object)
object = new_generic(factory, deleter);
575 template <
typename T>
578 std::shared_ptr<void> exit_trigger(
nullptr, [&](
void *) { mtx_.unlock(); });
583 mutable std::recursive_mutex
mtx_;
mysql_harness::RandomGeneratorInterface & get_RandomGenerator() const
Definition: dim.h:458
T & get_external_generic(UniquePtr< T > &object, const std::function< T *()> &factory, const std::function< void(T *)> &deleter)
Definition: dim.h:564
static T & get_generic(const std::function< T *(void)> &factory, const std::function< void(T *)> &deleter)
Definition: dim.h:522
void set_Config(const std::function< mysql_harness::LoaderConfig *(void)> &factory, const std::function< void(mysql_harness::LoaderConfig *)> &deleter)
Definition: dim.h:430
void set_LoggingRegistry(const std::function< mysql_harness::logging::Registry *(void)> &factory, const std::function< void(mysql_harness::logging::Registry *)> &deleter)
Definition: dim.h:403
std::function< void(mysql_harness::DynamicState *)> deleter_DynamicState_
Definition: dim.h:513
UniquePtr< mysqlrouter::MySQLSession > new_MySQLSession() const
Definition: dim.h:480
std::function< void(mysql_harness::RandomGeneratorInterface *)> deleter_RandomGenerator_
Definition: dim.h:504
static UniquePtr< T > new_generic(const std::function< T *(void)> &factory, const std::function< void(T *)> &deleter)
Definition: dim.h:531
std::function< void(mysqlrouter::MySQLSession *)> deleter_MySQLSession_
Definition: dim.h:498
UniquePtr< mysql_harness::logging::Registry > instance_LoggingRegistry_
Definition: dim.h:494
mysql_harness::DynamicState & get_DynamicState()
Definition: dim.h:470
void set_RandomGenerator(const std::function< mysql_harness::RandomGeneratorInterface *(void)> &factory, const std::function< void(mysql_harness::RandomGeneratorInterface *)> &deleter)
Definition: dim.h:419
std::function< void(mysql_harness::logging::Registry *)> deleter_LoggingRegistry_
Definition: dim.h:493
mysql_harness::LoaderConfig & get_Config()
Definition: dim.h:463
std::recursive_mutex mtx_
Definition: dim.h:583
void set_DynamicState(const std::function< mysql_harness::DynamicState *(void)> &factory, const std::function< void(mysql_harness::DynamicState *)> &deleter)
Definition: dim.h:439
static UniquePtr< T > new_generic1(const std::function< T *(A1)> &factory, const std::function< void(T *)> &deleter, const A1 &a1)
Definition: dim.h:541
static UniquePtr< T > new_generic2(const std::function< T *(A1, A2)> &factory, const std::function< void(T *)> &deleter, const A1 &a1, const A2 &a2)
Definition: dim.h:552
mysql_harness::logging::Registry & get_LoggingRegistry()
Definition: dim.h:451
std::function< void(mysql_harness::LoaderConfig *)> deleter_Config_
Definition: dim.h:508
void reset_generic(UniquePtr< T > &object)
Definition: dim.h:576
DIM & operator=(const DIM &)=delete
bool is_DynamicState()
Definition: dim.h:469
void reset_Config()
Definition: dim.h:429
void set_MySQLSession(const std::function< mysqlrouter::MySQLSession *(void)> &factory, const std::function< void(mysqlrouter::MySQLSession *)> &deleter)
Definition: dim.h:411
UniquePtr< mysql_harness::DynamicState > instance_DynamicState_
Definition: dim.h:514
UniquePtr< mysql_harness::LoaderConfig > instance_Config_
Definition: dim.h:509
void reset_LoggingRegistry()
Definition: dim.h:402
void reset_DynamicState()
Definition: dim.h:438
DynamicState represents a MySQLRouter dynamic state object.
Definition: dynamic_state.h:63
Configuration file handler for the loader.
Definition: loader_config.h:45
Definition: random_generator.h:35
Definition: unique_ptr.h:74
Definition: registry.h:46
Definition: mysql_session.h:154
const char * p
Definition: ctype-mb.cc:1236