Krita Source Code Documentation
Loading...
Searching...
No Matches
KisFutureUtils.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2023 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6#ifndef KISFUTUREUTILS_H
7#define KISFUTUREUTILS_H
8
9namespace kismpl {
10
17template <typename T>
18std::future<std::decay_t<T>> make_ready_future(T &&value) {
19 std::promise<T> promise;
20 promise.set_value(std::forward<T>(value));
21 return promise.get_future();
22}
23
24std::future<void> make_ready_future() {
25 std::promise<void> promise;
26 promise.set_value();
27 return promise.get_future();
28}
29
39template<class T, class Function>
40auto then(std::future<T>&& future, Function&& func)
41 -> std::future<decltype(func(std::move(future)))>
42{
43 return std::async(std::launch::deferred,
44 [](std::future<T>&& future, Function&& func)
45 {
46 future.wait();
47 return std::forward<Function>(func)(std::move(future));
48 },
49 std::move(future),
50 std::forward<Function>(func)
51 );
52}
53
54}
55
56#endif // KISFUTUREUTILS_H
float value(const T *src, size_t ch)
auto then(std::future< T > &&future, Function &&func) -> std::future< decltype(func(std::move(future)))>
std::future< void > make_ready_future()