@@ -14,13 +14,13 @@ template<
14
14
class async_events_collector {
15
15
public:
16
16
using async_error_callback_t = CallbackContainer<
17
- void (ecsact_async_error, std::span<ecsact_async_request_id>)>;
17
+ void (ecsact_async_session_id, ecsact_async_error, std::span<ecsact_async_request_id>)>;
18
18
19
- using async_requests_done_callback_t =
20
- CallbackContainer< void (std::span<ecsact_async_request_id>)>;
19
+ using async_requests_done_callback_t = CallbackContainer<
20
+ void (ecsact_async_session_id, std::span<ecsact_async_request_id>)>;
21
21
22
- using system_error_callback_t =
23
- CallbackContainer< void (ecsact_execute_systems_error)>;
22
+ using system_error_callback_t = CallbackContainer<
23
+ void (ecsact_async_session_id, ecsact_execute_systems_error)>;
24
24
25
25
/* *
26
26
* Set async error callback. If callback is already set it will be
@@ -95,6 +95,7 @@ private:
95
95
std::optional<async_requests_done_callback_t > _async_requests_done_cb;
96
96
97
97
static void async_error_callback (
98
+ ecsact_async_session_id session_id,
98
99
ecsact_async_error async_err,
99
100
int request_ids_length,
100
101
ecsact_async_request_id* request_ids,
@@ -107,22 +108,24 @@ private:
107
108
request_ids,
108
109
static_cast <size_t >(request_ids_length),
109
110
};
110
- self->_async_error_cb .value ()(async_err, request_ids_span);
111
+ self->_async_error_cb .value ()(session_id, async_err, request_ids_span);
111
112
}
112
113
}
113
114
114
115
static void system_error_callback (
116
+ ecsact_async_session_id session_id,
115
117
ecsact_execute_systems_error err,
116
118
void * callback_user_data
117
119
) {
118
120
auto self = static_cast <async_events_collector*>(callback_user_data);
119
121
120
122
if (self->_system_error_cb .has_value ()) {
121
- self->_system_error_cb .value ()(err);
123
+ self->_system_error_cb .value ()(session_id, err);
122
124
}
123
125
}
124
126
125
127
static void async_requests_done_callback (
128
+ ecsact_async_session_id session_id,
126
129
int request_ids_length,
127
130
ecsact_async_request_id* request_ids,
128
131
void * callback_user_data
@@ -134,20 +137,20 @@ private:
134
137
request_ids,
135
138
static_cast <size_t >(request_ids_length),
136
139
};
137
- self->_async_requests_done_cb .value ()(request_ids_span);
140
+ self->_async_requests_done_cb .value ()(session_id, request_ids_span);
138
141
}
139
142
}
140
143
};
141
144
142
145
[[nodiscard]] ECSACT_ALWAYS_INLINE auto start () -> ecsact_async_session_id {
143
- return ecsact_async_start (0 , nullptr );
146
+ return ecsact_async_start (nullptr , 0 );
144
147
}
145
148
146
149
[[nodiscard]] ECSACT_ALWAYS_INLINE auto start ( //
147
- int32_t size ,
148
- const void * data
150
+ const void * data ,
151
+ int32_t size
149
152
) -> ecsact_async_session_id {
150
- return ecsact_async_start (size, data );
153
+ return ecsact_async_start (data, size );
151
154
}
152
155
153
156
ECSACT_ALWAYS_INLINE auto stop (ecsact_async_session_id id) -> void {
@@ -167,39 +170,44 @@ ECSACT_ALWAYS_INLINE auto stop(ecsact_async_session_id id) -> void {
167
170
return ecsact_async_enqueue_execution_options (id, options.c ());
168
171
}
169
172
170
- ECSACT_ALWAYS_INLINE auto flush_events () -> void {
171
- ecsact_async_flush_events (nullptr , nullptr );
173
+ ECSACT_ALWAYS_INLINE auto flush_events ( //
174
+ ecsact_async_session_id session_id
175
+ ) -> void {
176
+ ecsact_async_flush_events (session_id, nullptr , nullptr );
172
177
}
173
178
174
179
template <typename ExecutionEventsCollector>
175
180
requires (std::convertible_to<
176
- decltype (std::declval<ExecutionEventsCollector>().c()),
177
- const ecsact_execution_events_collector>)
181
+ decltype (std::declval<ExecutionEventsCollector>().c()),
182
+ const ecsact_execution_events_collector>)
178
183
ECSACT_ALWAYS_INLINE auto flush_events( //
184
+ ecsact_async_session_id session_id,
179
185
ExecutionEventsCollector&& evc
180
186
) -> void {
181
187
const ecsact_execution_events_collector evc_c = evc.c ();
182
- ecsact_async_flush_events (&evc_c, nullptr );
188
+ ecsact_async_flush_events (session_id, &evc_c, nullptr );
183
189
}
184
190
185
191
template <typename AsyncEventsCollector>
186
192
requires (std::convertible_to<
187
- decltype (std::declval<AsyncEventsCollector>().c()),
188
- const ecsact_async_events_collector>)
193
+ decltype (std::declval<AsyncEventsCollector>().c()),
194
+ const ecsact_async_events_collector>)
189
195
ECSACT_ALWAYS_INLINE auto flush_events( //
190
- AsyncEventsCollector&& async_evc
196
+ ecsact_async_session_id session_id,
197
+ AsyncEventsCollector&& async_evc
191
198
) -> void {
192
199
const ecsact_async_events_collector async_evc_c = async_evc.c ();
193
- ecsact_async_flush_events (nullptr , &async_evc_c);
200
+ ecsact_async_flush_events (session_id, nullptr , &async_evc_c);
194
201
}
195
202
196
203
template <typename ExecutionEventsCollector, typename AsyncEventsCollector>
197
204
ECSACT_ALWAYS_INLINE auto flush_events (
205
+ ecsact_async_session_id session_id,
198
206
ExecutionEventsCollector&& evc,
199
207
AsyncEventsCollector&& async_evc
200
208
) -> void {
201
209
const ecsact_execution_events_collector evc_c = evc.c ();
202
210
const ecsact_async_events_collector async_evc_c = async_evc.c ();
203
- ecsact_async_flush_events (&evc_c, &async_evc_c);
211
+ ecsact_async_flush_events (session_id, &evc_c, &async_evc_c);
204
212
}
205
213
} // namespace ecsact::async
0 commit comments