1 #ifndef _library__register_queue__hpp__included__
2 #define _library__register_queue__hpp__included__
4 #include "threadtypes.hpp"
10 * Object registration queue.
12 template<class G
, class O
>
19 * Parameter group: The group to register to.
20 * Parameter name: The name for object.
21 * Parameter object: The object to register.
23 static void do_register(G
& group
, const std::string
& name
, O
& object
)
26 umutex_class
h(get_mutex());
27 if(get_ready().count(&group
)) {
28 group
.do_register(name
, object
);
31 queue_entry
<G
, O
> ent
;
35 get_pending().push_back(ent
);
40 * Unregister an object.
42 * Parameter group: The group to unregister from.
43 * Parameter name: The name for object.
45 static void do_unregister(G
& group
, const std::string
& name
)
47 umutex_class
h(get_mutex());
48 auto& x
= get_pending();
52 if(&group
== e
->group
&& name
== e
->name
)
55 if(get_ready().count(&group
))
56 group
.do_unregister(name
);
59 * Mark group ready/not ready.
61 * Parameter group: The group.
62 * Parameter ready: True if ready, false if not.
64 static void do_ready(G
& group
, bool ready
)
67 umutex_class
h(get_mutex());
69 get_ready().insert(&group
);
71 get_ready().erase(&group
);
76 template<class G2
, class O2
>
83 static std::set
<G
*>& get_ready()
85 static std::set
<G
*> x
;
88 static std::list
<queue_entry
<G
, O
>>& get_pending()
90 static std::list
<queue_entry
<G
, O
>> x
;
93 static mutex_class
& get_mutex()
100 umutex_class
h(get_mutex());
101 auto& x
= get_pending();
103 while(i
!= x
.end()) {
105 if(get_ready().count(e
->group
)) {
106 e
->group
->do_register(e
->name
, *e
->object
);