feat update

This commit is contained in:
tqcq
2024-03-21 14:31:43 +08:00
parent bd0f7bd208
commit 2bb58ab55a
4 changed files with 83 additions and 2 deletions

68
include/sled/exec/just.h Normal file
View File

@@ -0,0 +1,68 @@
#pragma once
#ifndef SLED_EXEC_JUST_H
#define SLED_EXEC_JUST_H
#include <iostream>
#include <utility>
namespace sled {
struct immovable {
immovable() = default;
immovable(immovable &&) = delete;
};
template<typename S, typename R>
using connect_result_t = decltype(connect(std::declval<S>(), std::declval<R>()));
template<typename T>
using sender_result_t = typename T::result_t;
template<typename R, typename T>
struct just_operation : immovable {
R receiver;
T value;
friend void start(just_operation &self) { set_value(self.receiver, self.value); }
};
template<typename T>
struct just_sender {
using result_t = T;
T value;
template<typename R>
just_operation<R, T> connect(R receiver)
{
return {{}, receiver, this->value};
}
};
template<typename T>
just_sender<T>
just(T t)
{
return {t};
}
struct cout_receiver {
template<typename T>
friend void set_value(cout_receiver self, T &&val)
{
std::cout << "Result: " << val << std::endl;
}
friend void set_error(cout_receiver self, std::exception_ptr e)
{
try {
std::rethrow_exception(e);
} catch (const std::exception &e) {
std::cout << "Error: " << e.what() << std::endl;
}
}
friend void set_stopped(cout_receiver self) { std::cout << "Stopped" << std::endl; }
};
}// namespace sled
#endif// SLED_EXEC_JUST_H