1
1
#include " execution_callbacks.hh"
2
2
3
- std::vector<types::callback_info> execution_callbacks::init_callbacks_info = {};
4
- std::vector<types::callback_info> execution_callbacks::update_callbacks_info =
5
- {};
6
- std::vector<types::callback_info> execution_callbacks::remove_callbacks_info =
7
- {};
3
+ execution_callbacks::execution_callbacks () {
4
+ collector.init_callback = &execution_callbacks::init_callback;
5
+ collector.update_callback = &execution_callbacks::update_callback;
6
+ collector.remove_callback = &execution_callbacks::remove_callback;
7
+ collector.init_callback_user_data = this ;
8
+ collector.update_callback_user_data = this ;
9
+ collector.remove_callback_user_data = this ;
10
+ }
8
11
9
- std::mutex execution_callbacks::execution_m = {};
12
+ ecsact_execution_events_collector* execution_callbacks::get_collector () {
13
+ return &collector;
14
+ }
10
15
11
16
void execution_callbacks::invoke (
12
17
const ecsact_execution_events_collector* execution_events,
@@ -92,13 +97,14 @@ void execution_callbacks::init_callback(
92
97
const void * component_data,
93
98
void * callback_user_data
94
99
) {
95
- types::callback_info info;
100
+ auto self = static_cast <execution_callbacks*>(callback_user_data);
101
+ auto info = types::callback_info{};
96
102
97
103
info.event = event;
98
104
info.entity_id = entity_id;
99
105
info.component_id = component_id;
100
- std::unique_lock lk (execution_m);
101
- init_callbacks_info.insert (init_callbacks_info. end (), info);
106
+ std::unique_lock lk (self-> execution_m );
107
+ self-> init_callbacks_info .push_back ( info);
102
108
}
103
109
104
110
void execution_callbacks::update_callback (
@@ -108,13 +114,14 @@ void execution_callbacks::update_callback(
108
114
const void * component_data,
109
115
void * callback_user_data
110
116
) {
111
- types::callback_info info;
117
+ auto self = static_cast <execution_callbacks*>(callback_user_data);
118
+ auto info = types::callback_info{};
112
119
113
120
info.event = event;
114
121
info.entity_id = entity_id;
115
122
info.component_id = component_id;
116
- std::unique_lock lk (execution_m);
117
- update_callbacks_info.insert (init_callbacks_info. end (), info);
123
+ std::unique_lock lk (self-> execution_m );
124
+ self-> update_callbacks_info .push_back ( info);
118
125
}
119
126
120
127
void execution_callbacks::remove_callback (
@@ -124,20 +131,18 @@ void execution_callbacks::remove_callback(
124
131
const void * component_data,
125
132
void * callback_user_data
126
133
) {
127
- types::callback_info info ;
134
+ auto self = static_cast <execution_callbacks*>(callback_user_data) ;
128
135
129
- std::unique_lock lk (execution_m);
130
- for (int i = 0 ; i < init_callbacks_info.size (); i++) {
131
- if (init_callbacks_info[i].component_id == component_id) {
132
- init_callbacks_info.erase (init_callbacks_info.begin () + i);
133
- break ;
134
- }
135
- }
136
+ std::unique_lock lk (self->execution_m );
137
+ std::erase_if (self->init_callbacks_info , [&](auto & init_cb_info) {
138
+ return init_cb_info.component_id == component_id;
139
+ });
136
140
lk.unlock ();
137
141
142
+ auto info = types::callback_info{};
138
143
info.event = event;
139
144
info.entity_id = entity_id;
140
145
info.component_id = component_id;
141
146
lk.lock ();
142
- remove_callbacks_info.insert (init_callbacks_info. end (), info);
147
+ self-> remove_callbacks_info .push_back ( info);
143
148
}
0 commit comments