38 std::lock_guard<std::mutex> g1(
mutex_, std::adopt_lock);
39 std::lock_guard<std::mutex> g2(other.mutex_, std::adopt_lock);
44 std::swap(interruptHandler_, other.interruptHandler_);
52 std::lock_guard<std::mutex>
g(
mutex_);
58 std::lock_guard<std::mutex>
g(
mutex_);
61 return makeFuture<T>(
Try<T>(try_));
63 promises_.emplace_back();
64 if (interruptHandler_) {
65 promises_.back().setInterruptHandler(interruptHandler_);
67 return promises_.back().getSemiFuture();
91 std::lock_guard<std::mutex>
g(
mutex_);
95 interruptHandler_ = fn;
96 for (
auto& p : promises_) {
97 p.setInterruptHandler(fn);
104 setTry(
Try<T>(std::forward<M>(
v)));
115 std::vector<Promise<T>> promises;
118 std::lock_guard<std::mutex>
g(
mutex_);
120 throw_exception<PromiseAlreadySatisfied>();
124 promises.swap(promises_);
127 for (
auto& p : promises) {
134 std::lock_guard<std::mutex>
g(
mutex_);
void setInterruptHandler(std::function< void(exception_wrapper const &)>)
constexpr detail::Map< Move > move
—— Concurrent Priority Queue Implementation ——
requires E e noexcept(noexcept(s.error(std::move(e))))
void setTry(Try< T > &&t)
std::enable_if< std::is_same< Unit, B >::value, void >::type setValue()
Sugar to fulfill this SharedPromise<Unit>
void setException(exception_wrapper ew)
auto lock(SynchronizedLocker...lockersIn) -> std::tuple< typename SynchronizedLocker::LockedPtr... >
FOLLY_ATTR_VISIBILITY_HIDDEN static FOLLY_ALWAYS_INLINE InlineExecutor & instance() noexcept
static const char *const value
**Optimized Holders **The template hazptr_array< M > provides most of the functionality *of M hazptr_holder s but with faster construction destruction *for M
SharedPromise & operator=(SharedPromise const &)=delete
std::enable_if< !std::is_same< invoke_result_t< F >, void >::value, Try< invoke_result_t< F > > >::type makeTryWith(F &&f)
void swap(SwapTrackingAlloc< T > &, SwapTrackingAlloc< T > &)
SemiFuture< T > getSemiFuture()