]> git.ipfire.org Git - thirdparty/squid.git/blob - src/base/RunnersRegistry.cc
Merged from trunk (r13356).
[thirdparty/squid.git] / src / base / RunnersRegistry.cc
1 #include "squid.h"
2 #include "base/RunnersRegistry.h"
3 #include <set>
4
5 /// a collection of unique runners, in no particular order
6 typedef std::set<RegisteredRunner*> Runners;
7 /// all known runners
8 static Runners *TheRunners = NULL;
9
10 /// safely returns registered runners, initializing structures as needed
11 static Runners &
12 GetRunners()
13 {
14 if (!TheRunners)
15 TheRunners = new Runners;
16 return *TheRunners;
17 }
18
19 int
20 RegisterRunner(RegisteredRunner *rr)
21 {
22 Runners &runners = GetRunners();
23 runners.insert(rr);
24 return runners.size();
25 }
26
27 void
28 RunRegistered(const RegisteredRunner::Method &m)
29 {
30 Runners &runners = GetRunners();
31 typedef Runners::iterator RRI;
32 for (RRI i = runners.begin(); i != runners.end(); ++i)
33 ((*i)->*m)();
34
35 if (m == &RegisteredRunner::finishShutdown) {
36 delete TheRunners;
37 TheRunners = NULL;
38 }
39 }
40
41 bool
42 UseThisStatic(const void *)
43 {
44 return true;
45 }