Skip to content

Commit 9d4423b

Browse files
committed
More code revision
1 parent cf21766 commit 9d4423b

File tree

3 files changed

+40
-37
lines changed

3 files changed

+40
-37
lines changed

reference/async_reference/async_reference.cc

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -158,14 +158,7 @@ void async_reference::execute_systems() {
158158
// TODO(Kelwan): Add done callbacks so we can resolve all requests
159159
// https://github.com/ecsact-dev/ecsact_runtime/issues/102
160160

161-
ecsact_execution_events_collector collector;
162-
collector.init_callback = &execution_callbacks::init_callback;
163-
collector.update_callback = &execution_callbacks::update_callback;
164-
collector.remove_callback = &execution_callbacks::remove_callback;
165-
166-
collector.init_callback_user_data = nullptr;
167-
collector.update_callback_user_data = nullptr;
168-
collector.remove_callback_user_data = nullptr;
161+
auto collector = exec_callbacks.get_collector();
169162

170163
std::unique_ptr<ecsact_execution_options> options = nullptr;
171164

@@ -178,7 +171,7 @@ void async_reference::execute_systems() {
178171
entity_manager.process_entities(async_callbacks, *registry_id);
179172

180173
auto systems_error =
181-
ecsact_execute_systems(*registry_id, 1, options.get(), &collector);
174+
ecsact_execute_systems(*registry_id, 1, options.get(), collector);
182175

183176
auto end = clock::now();
184177
execution_duration = duration_cast<nanoseconds>(end - start);

reference/async_reference/callbacks/execution_callbacks.cc

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
#include "execution_callbacks.hh"
22

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+
}
811

9-
std::mutex execution_callbacks::execution_m = {};
12+
ecsact_execution_events_collector* execution_callbacks::get_collector() {
13+
return &collector;
14+
}
1015

1116
void execution_callbacks::invoke(
1217
const ecsact_execution_events_collector* execution_events,
@@ -92,13 +97,14 @@ void execution_callbacks::init_callback(
9297
const void* component_data,
9398
void* callback_user_data
9499
) {
95-
types::callback_info info;
100+
auto self = static_cast<execution_callbacks*>(callback_user_data);
101+
auto info = types::callback_info{};
96102

97103
info.event = event;
98104
info.entity_id = entity_id;
99105
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);
102108
}
103109

104110
void execution_callbacks::update_callback(
@@ -108,13 +114,14 @@ void execution_callbacks::update_callback(
108114
const void* component_data,
109115
void* callback_user_data
110116
) {
111-
types::callback_info info;
117+
auto self = static_cast<execution_callbacks*>(callback_user_data);
118+
auto info = types::callback_info{};
112119

113120
info.event = event;
114121
info.entity_id = entity_id;
115122
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);
118125
}
119126

120127
void execution_callbacks::remove_callback(
@@ -124,20 +131,18 @@ void execution_callbacks::remove_callback(
124131
const void* component_data,
125132
void* callback_user_data
126133
) {
127-
types::callback_info info;
134+
auto self = static_cast<execution_callbacks*>(callback_user_data);
128135

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+
});
136140
lk.unlock();
137141

142+
auto info = types::callback_info{};
138143
info.event = event;
139144
info.entity_id = entity_id;
140145
info.component_id = component_id;
141146
lk.lock();
142-
remove_callbacks_info.insert(init_callbacks_info.end(), info);
147+
self->remove_callbacks_info.push_back(info);
143148
}

reference/async_reference/callbacks/execution_callbacks.hh

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,23 @@
88

99
class execution_callbacks {
1010
public:
11+
execution_callbacks();
12+
1113
void invoke(
1214
const ecsact_execution_events_collector* execution_events,
1315
ecsact_registry_id registry_id
1416
);
1517

18+
ecsact_execution_events_collector* get_collector();
19+
20+
private:
21+
ecsact_execution_events_collector collector;
22+
std::mutex execution_m;
23+
24+
std::vector<types::callback_info> init_callbacks_info;
25+
std::vector<types::callback_info> update_callbacks_info;
26+
std::vector<types::callback_info> remove_callbacks_info;
27+
1628
static void init_callback(
1729
ecsact_event event,
1830
ecsact_entity_id entity_id,
@@ -36,11 +48,4 @@ public:
3648
const void* component_data,
3749
void* callback_user_data
3850
);
39-
40-
private:
41-
static std::mutex execution_m;
42-
43-
static std::vector<types::callback_info> init_callbacks_info;
44-
static std::vector<types::callback_info> update_callbacks_info;
45-
static std::vector<types::callback_info> remove_callbacks_info;
4651
};

0 commit comments

Comments
 (0)