X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2Ffutures%2FPromise.h;h=379ad5d6fdc2b5c273a1cfeb5ff44110936370d6;hb=0afc127248ddfd944ec11648ff066d783b87c078;hp=a38d6f1c82604401f104b215f65f8e4c14ea8a96;hpb=efecbe5fbf3cedbb7b22431a8764469d064a251f;p=folly.git diff --git a/folly/futures/Promise.h b/folly/futures/Promise.h index a38d6f1c..379ad5d6 100644 --- a/folly/futures/Promise.h +++ b/folly/futures/Promise.h @@ -1,5 +1,5 @@ /* - * Copyright 2015 Facebook, Inc. + * Copyright 2016 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ #pragma once -#include +#include #include #include @@ -43,19 +43,20 @@ public: once, thereafter Future already retrieved exception will be raised. */ Future getFuture(); - /** Fulfil the Promise with an exception_wrapper */ + /** Fulfill the Promise with an exception_wrapper */ void setException(exception_wrapper ew); - /** Fulfil the Promise with an exception_ptr, e.g. + /** Fulfill the Promise with an exception_ptr, e.g. try { ... } catch (...) { p.setException(std::current_exception()); } */ - void setException(std::exception_ptr const&) DEPRECATED; + FOLLY_DEPRECATED("use setException(exception_wrapper)") + void setException(std::exception_ptr const&); - /** Fulfil the Promise with an exception type E, which can be passed to + /** Fulfill the Promise with an exception type E, which can be passed to std::make_exception_ptr(). Useful for originating exceptions. If you caught an exception the exception_wrapper form is more appropriate. */ @@ -65,31 +66,38 @@ public: /// Set an interrupt handler to handle interrupts. See the documentation for /// Future::raise(). Your handler can do whatever it wants, but if you - /// bother to set one then you probably will want to fulfil the promise with + /// bother to set one then you probably will want to fulfill the promise with /// an exception (or special value) indicating how the interrupt was /// handled. void setInterruptHandler(std::function); - /** Fulfil this Promise (only for Promise) */ - void setValue(); + /// Sugar to fulfill this Promise + template + typename std::enable_if::value, void>::type + setValue() { + setTry(Try(T())); + } /** Set the value (use perfect forwarding for both move and copy) */ template void setValue(M&& value); - void fulfilTry(Try t); + void setTry(Try&& t); - /** Fulfil this Promise with the result of a function that takes no + /** Fulfill this Promise with the result of a function that takes no arguments and returns something implicitly convertible to T. Captures exceptions. e.g. - p.fulfil([] { do something that may throw; return a T; }); + p.setWith([] { do something that may throw; return a T; }); */ template - void fulfil(F&& func); + void setWith(F&& func); + + bool isFulfilled(); private: typedef typename Future::corePtr corePtr; + template friend class Future; // Whether the Future has been retrieved (a one-time operation). bool retrieved_;