runtime: Add a Signal class

Not very functional yet
This commit is contained in:
Olivier Goffart 2020-05-20 15:22:07 +02:00
parent 4f22e2c341
commit 83d206ea39
5 changed files with 158 additions and 2 deletions

View file

@ -0,0 +1,33 @@
#pragma once
#include <string_view>
#include "sixtyfps_signals_internal.h"
namespace sixtyfps {
// template<typename... Args>
struct Signal
{
Signal() { internal::sixtyfps_signal_init(&inner); }
~Signal() { internal::sixtyfps_signal_drop(&inner); }
Signal(const Signal &) = delete;
Signal(Signal &&) = delete;
Signal &operator=(const Signal &) = delete;
template<typename F>
void set_handler(F binding)
{
internal::sixtyfps_signal_set_handler(
&inner,
[](const void *user_data, const void *value) {
(*reinterpret_cast<F *>(user_data))(value);
},
new F(binding),
[](const void *user_data) { delete reinterpret_cast<F *>(user_data); });
}
void emit(void *data) const { internal::sixtyfps_signal_emit(&inner, data); }
private:
internal::SignalOpaque inner;
};
}