25 singletons_manager::singletons_manager()
26 : lst{}, nb_partitions{lst.num_threads()}
29 singletons_manager& singletons_manager::manager(){
30 static singletons_manager x;
34 void singletons_manager::register_new_singleton(singleton_instance_base *p){
35 register_new_singleton(p, manager().lst.this_thread());
38 void singletons_manager::register_new_singleton(singleton_instance_base *p,
size_t ithread){
39 if (p) manager().lst(ithread).push_back(p);
42 void singletons_manager::on_partitions_change(){
43 auto new_nb_partitions = manager().lst.num_threads();
44 auto &nb_partitions = manager().nb_partitions;
45 if (new_nb_partitions > nb_partitions){
46 manager().lst.on_thread_update();
47 nb_partitions = new_nb_partitions;
51 static int level_compare(singleton_instance_base *a, singleton_instance_base *b) {
52 return a->level() < b->level();
55 singletons_manager::~singletons_manager() {
56 for(
size_type i = 0; i != nb_partitions; ++i){
57 std::sort(lst(i).begin(), lst(i).end(), level_compare);
58 for (
auto &&p : lst(i))
delete p;
A simple singleton implementation.
size_t size_type
used as the common size type in the library