| Flutter Impeller |

promise.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef FLUTTER_IMPELLER_BASE_PROMISE_H_
6 #define FLUTTER_IMPELLER_BASE_PROMISE_H_
7
8 #include <future>
9
10 namespace impeller {
11
12 template <class T>
13 std::future<T> RealizedFuture(T t) {
14 std::promise<T> promise;
15 auto future = promise.get_future();
16 promise.set_value(std::move(t));
17 return future;
18 }
19
20 // Wraps a std::promise and completes the promise with a value during
21 // destruction if the promise does not already have a value.
22 //
23 // By default the std::promise destructor will complete an empty promise with an
24 // exception. This will fail because Flutter is built without exception support.
25 template <typename T>
26 class NoExceptionPromise {
27 public:
28 NoExceptionPromise() = default;
29
30 ~NoExceptionPromise() {
31 if (!value_set_) {
32 promise_.set_value({});
33 }
34 }
35
36 std::future<T> get_future() { return promise_.get_future(); }
37
38 void set_value(const T& value) {
39 promise_.set_value(value);
40 value_set_ = true;
41 }
42
43 private:
44 std::promise<T> promise_;
45 bool value_set_ = false;
46 };
47
48 } // namespace impeller
49
50 #endif // FLUTTER_IMPELLER_BASE_PROMISE_H_
value
int32_t value
Definition: dl_golden_unittests.cc:444
impeller::NoExceptionPromise::set_value
void set_value(const T &value)
Definition: promise.h:38
impeller::NoExceptionPromise::get_future
std::future< T > get_future()
Definition: promise.h:36
impeller::NoExceptionPromise::NoExceptionPromise
NoExceptionPromise()=default
impeller::RealizedFuture
std::future< T > RealizedFuture(T t)
Definition: promise.h:13
impeller::NoExceptionPromise
Definition: promise.h:26
impeller::NoExceptionPromise::~NoExceptionPromise
~NoExceptionPromise()
Definition: promise.h:30
impeller
Definition: allocation.cc:12