Skip to content

Commit c306068

Browse files
committed
chore: fix line endings
1 parent be0647a commit c306068

File tree

2 files changed

+439
-439
lines changed

2 files changed

+439
-439
lines changed

ecsact/runtime/async.hh

Lines changed: 189 additions & 189 deletions
Original file line numberDiff line numberDiff line change
@@ -1,189 +1,189 @@
1-
#pragma once
2-
3-
#include <string>
4-
#include <span>
5-
#include <concepts>
6-
#include <utility>
7-
#include "ecsact/runtime/core.hh"
8-
#include "ecsact/runtime/async.h"
9-
10-
namespace ecsact::async {
11-
12-
template<
13-
template<class R, class... Args> typename CallbackContainer = std::function>
14-
class async_events_collector {
15-
public:
16-
using async_error_callback_t = CallbackContainer<
17-
void(ecsact_async_error, std::span<ecsact_async_request_id>)>;
18-
19-
using async_requests_done_callback_t =
20-
CallbackContainer<void(std::span<ecsact_async_request_id>)>;
21-
22-
using system_error_callback_t =
23-
CallbackContainer<void(ecsact_execute_systems_error)>;
24-
25-
/**
26-
* Set async error callback. If callback is already set it will be
27-
* overwritten.
28-
*/
29-
auto set_async_error_callback(async_error_callback_t callback)
30-
-> async_events_collector& {
31-
_async_error_cb = std::move(callback);
32-
return *this;
33-
}
34-
35-
/**
36-
* Set async error callback. If callback is already set it will be
37-
* overwritten.
38-
*/
39-
auto set_system_error_callback(system_error_callback_t callback)
40-
-> async_events_collector& {
41-
_system_error_cb = std::move(callback);
42-
return *this;
43-
}
44-
45-
/**
46-
* Set async error callback. If callback is already set it will be
47-
* overwritten.
48-
*/
49-
auto set_async_requests_done_callback(async_requests_done_callback_t callback)
50-
-> async_events_collector& {
51-
_async_requests_done_cb = std::move(callback);
52-
return *this;
53-
}
54-
55-
auto c() const -> const ecsact_async_events_collector {
56-
auto evc = ecsact_async_events_collector{};
57-
auto user_data =
58-
static_cast<void*>(const_cast<async_events_collector*>(this));
59-
60-
if(_async_error_cb.has_value()) {
61-
evc.async_error_callback = &async_events_collector::async_error_callback;
62-
evc.async_error_callback_user_data = user_data;
63-
}
64-
65-
if(_system_error_cb.has_value()) {
66-
evc.system_error_callback =
67-
&async_events_collector::system_error_callback;
68-
evc.system_error_callback_user_data = user_data;
69-
}
70-
71-
if(_async_requests_done_cb.has_value()) {
72-
evc.async_request_done_callback =
73-
&async_events_collector::async_requests_done_callback;
74-
evc.async_request_done_callback_user_data = user_data;
75-
}
76-
77-
return evc;
78-
}
79-
80-
auto clear() -> void {
81-
_async_error_cb = std::nullopt;
82-
_system_error_cb = std::nullopt;
83-
}
84-
85-
auto empty() const -> bool {
86-
return _async_error_cb.empty() && _system_error_cb.empty();
87-
}
88-
89-
private:
90-
std::optional<async_error_callback_t> _async_error_cb;
91-
std::optional<system_error_callback_t> _system_error_cb;
92-
std::optional<async_requests_done_callback_t> _async_requests_done_cb;
93-
94-
static void async_error_callback(
95-
ecsact_async_error async_err,
96-
int request_ids_length,
97-
ecsact_async_request_id* request_ids,
98-
void* callback_user_data
99-
) {
100-
auto self = static_cast<async_events_collector*>(callback_user_data);
101-
102-
if(self->_async_error_cb.has_value()) {
103-
auto request_ids_span = std::span{
104-
request_ids,
105-
static_cast<size_t>(request_ids_length),
106-
};
107-
self->_async_error_cb.value()(async_err, request_ids_span);
108-
}
109-
}
110-
111-
static void system_error_callback(
112-
ecsact_execute_systems_error err,
113-
void* callback_user_data
114-
) {
115-
auto self = static_cast<async_events_collector*>(callback_user_data);
116-
117-
if(self->_system_error_cb.has_value()) {
118-
self->_system_error_cb.value()(err);
119-
}
120-
}
121-
122-
static void async_requests_done_callback(
123-
int request_ids_length,
124-
ecsact_async_request_id* request_ids,
125-
void* callback_user_data
126-
) {
127-
auto self = static_cast<async_events_collector*>(callback_user_data);
128-
129-
if(self->_async_requests_done_cb.has_value()) {
130-
auto request_ids_span = std::span{
131-
request_ids,
132-
static_cast<size_t>(request_ids_length),
133-
};
134-
self->_async_requests_done_cb.value()(request_ids_span);
135-
}
136-
}
137-
};
138-
139-
[[nodiscard]] inline auto connect(const std::string& connection_string)
140-
-> ecsact_async_request_id {
141-
return ecsact_async_connect(connection_string.c_str());
142-
}
143-
144-
inline auto disconnect() -> void {
145-
ecsact_async_disconnect();
146-
}
147-
148-
[[nodiscard]] inline auto get_current_tick() -> int32_t {
149-
return ecsact_async_get_current_tick();
150-
}
151-
152-
[[nodiscard]] inline auto enqueue_execution_options(
153-
ecsact::core::execution_options& options
154-
) -> ecsact_async_request_id {
155-
return ecsact_async_enqueue_execution_options(options.c());
156-
}
157-
158-
inline auto flush_events() -> void {
159-
ecsact_async_flush_events(nullptr, nullptr);
160-
}
161-
162-
template<typename ExecutionEventsCollector>
163-
requires(std::convertible_to<
164-
decltype(std::declval<ExecutionEventsCollector>().c()),
165-
const ecsact_execution_events_collector>)
166-
inline auto flush_events(ExecutionEventsCollector&& evc) -> void {
167-
const ecsact_execution_events_collector evc_c = evc.c();
168-
ecsact_async_flush_events(&evc_c, nullptr);
169-
}
170-
171-
template<typename AsyncEventsCollector>
172-
requires(std::convertible_to<
173-
decltype(std::declval<AsyncEventsCollector>().c()),
174-
const ecsact_async_events_collector>)
175-
inline auto flush_events(AsyncEventsCollector&& async_evc) -> void {
176-
const ecsact_async_events_collector async_evc_c = async_evc.c();
177-
ecsact_async_flush_events(nullptr, &async_evc_c);
178-
}
179-
180-
template<typename ExecutionEventsCollector, typename AsyncEventsCollector>
181-
inline auto flush_events(
182-
ExecutionEventsCollector&& evc,
183-
AsyncEventsCollector&& async_evc
184-
) -> void {
185-
const ecsact_execution_events_collector evc_c = evc.c();
186-
const ecsact_async_events_collector async_evc_c = async_evc.c();
187-
ecsact_async_flush_events(&evc_c, &async_evc_c);
188-
}
189-
} // namespace ecsact::async
1+
#pragma once
2+
3+
#include <string>
4+
#include <span>
5+
#include <concepts>
6+
#include <utility>
7+
#include "ecsact/runtime/core.hh"
8+
#include "ecsact/runtime/async.h"
9+
10+
namespace ecsact::async {
11+
12+
template<
13+
template<class R, class... Args> typename CallbackContainer = std::function>
14+
class async_events_collector {
15+
public:
16+
using async_error_callback_t = CallbackContainer<
17+
void(ecsact_async_error, std::span<ecsact_async_request_id>)>;
18+
19+
using async_requests_done_callback_t =
20+
CallbackContainer<void(std::span<ecsact_async_request_id>)>;
21+
22+
using system_error_callback_t =
23+
CallbackContainer<void(ecsact_execute_systems_error)>;
24+
25+
/**
26+
* Set async error callback. If callback is already set it will be
27+
* overwritten.
28+
*/
29+
auto set_async_error_callback(async_error_callback_t callback)
30+
-> async_events_collector& {
31+
_async_error_cb = std::move(callback);
32+
return *this;
33+
}
34+
35+
/**
36+
* Set async error callback. If callback is already set it will be
37+
* overwritten.
38+
*/
39+
auto set_system_error_callback(system_error_callback_t callback)
40+
-> async_events_collector& {
41+
_system_error_cb = std::move(callback);
42+
return *this;
43+
}
44+
45+
/**
46+
* Set async error callback. If callback is already set it will be
47+
* overwritten.
48+
*/
49+
auto set_async_requests_done_callback(async_requests_done_callback_t callback)
50+
-> async_events_collector& {
51+
_async_requests_done_cb = std::move(callback);
52+
return *this;
53+
}
54+
55+
auto c() const -> const ecsact_async_events_collector {
56+
auto evc = ecsact_async_events_collector{};
57+
auto user_data =
58+
static_cast<void*>(const_cast<async_events_collector*>(this));
59+
60+
if(_async_error_cb.has_value()) {
61+
evc.async_error_callback = &async_events_collector::async_error_callback;
62+
evc.async_error_callback_user_data = user_data;
63+
}
64+
65+
if(_system_error_cb.has_value()) {
66+
evc.system_error_callback =
67+
&async_events_collector::system_error_callback;
68+
evc.system_error_callback_user_data = user_data;
69+
}
70+
71+
if(_async_requests_done_cb.has_value()) {
72+
evc.async_request_done_callback =
73+
&async_events_collector::async_requests_done_callback;
74+
evc.async_request_done_callback_user_data = user_data;
75+
}
76+
77+
return evc;
78+
}
79+
80+
auto clear() -> void {
81+
_async_error_cb = std::nullopt;
82+
_system_error_cb = std::nullopt;
83+
}
84+
85+
auto empty() const -> bool {
86+
return _async_error_cb.empty() && _system_error_cb.empty();
87+
}
88+
89+
private:
90+
std::optional<async_error_callback_t> _async_error_cb;
91+
std::optional<system_error_callback_t> _system_error_cb;
92+
std::optional<async_requests_done_callback_t> _async_requests_done_cb;
93+
94+
static void async_error_callback(
95+
ecsact_async_error async_err,
96+
int request_ids_length,
97+
ecsact_async_request_id* request_ids,
98+
void* callback_user_data
99+
) {
100+
auto self = static_cast<async_events_collector*>(callback_user_data);
101+
102+
if(self->_async_error_cb.has_value()) {
103+
auto request_ids_span = std::span{
104+
request_ids,
105+
static_cast<size_t>(request_ids_length),
106+
};
107+
self->_async_error_cb.value()(async_err, request_ids_span);
108+
}
109+
}
110+
111+
static void system_error_callback(
112+
ecsact_execute_systems_error err,
113+
void* callback_user_data
114+
) {
115+
auto self = static_cast<async_events_collector*>(callback_user_data);
116+
117+
if(self->_system_error_cb.has_value()) {
118+
self->_system_error_cb.value()(err);
119+
}
120+
}
121+
122+
static void async_requests_done_callback(
123+
int request_ids_length,
124+
ecsact_async_request_id* request_ids,
125+
void* callback_user_data
126+
) {
127+
auto self = static_cast<async_events_collector*>(callback_user_data);
128+
129+
if(self->_async_requests_done_cb.has_value()) {
130+
auto request_ids_span = std::span{
131+
request_ids,
132+
static_cast<size_t>(request_ids_length),
133+
};
134+
self->_async_requests_done_cb.value()(request_ids_span);
135+
}
136+
}
137+
};
138+
139+
[[nodiscard]] inline auto connect(const std::string& connection_string)
140+
-> ecsact_async_request_id {
141+
return ecsact_async_connect(connection_string.c_str());
142+
}
143+
144+
inline auto disconnect() -> void {
145+
ecsact_async_disconnect();
146+
}
147+
148+
[[nodiscard]] inline auto get_current_tick() -> int32_t {
149+
return ecsact_async_get_current_tick();
150+
}
151+
152+
[[nodiscard]] inline auto enqueue_execution_options(
153+
ecsact::core::execution_options& options
154+
) -> ecsact_async_request_id {
155+
return ecsact_async_enqueue_execution_options(options.c());
156+
}
157+
158+
inline auto flush_events() -> void {
159+
ecsact_async_flush_events(nullptr, nullptr);
160+
}
161+
162+
template<typename ExecutionEventsCollector>
163+
requires(std::convertible_to<
164+
decltype(std::declval<ExecutionEventsCollector>().c()),
165+
const ecsact_execution_events_collector>)
166+
inline auto flush_events(ExecutionEventsCollector&& evc) -> void {
167+
const ecsact_execution_events_collector evc_c = evc.c();
168+
ecsact_async_flush_events(&evc_c, nullptr);
169+
}
170+
171+
template<typename AsyncEventsCollector>
172+
requires(std::convertible_to<
173+
decltype(std::declval<AsyncEventsCollector>().c()),
174+
const ecsact_async_events_collector>)
175+
inline auto flush_events(AsyncEventsCollector&& async_evc) -> void {
176+
const ecsact_async_events_collector async_evc_c = async_evc.c();
177+
ecsact_async_flush_events(nullptr, &async_evc_c);
178+
}
179+
180+
template<typename ExecutionEventsCollector, typename AsyncEventsCollector>
181+
inline auto flush_events(
182+
ExecutionEventsCollector&& evc,
183+
AsyncEventsCollector&& async_evc
184+
) -> void {
185+
const ecsact_execution_events_collector evc_c = evc.c();
186+
const ecsact_async_events_collector async_evc_c = async_evc.c();
187+
ecsact_async_flush_events(&evc_c, &async_evc_c);
188+
}
189+
} // namespace ecsact::async

0 commit comments

Comments
 (0)