X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=blobdiff_plain;f=folly%2Fexperimental%2Ffibers%2FAddTasks.h;h=be4c25b1ec4a48e8d2d8870ed9aa45aa9f659ac2;hp=9e3019d3da345260650eff231dcca6adf4ad11be;hb=93db3df45dd290f1024b9a4e556f65c549e0c43e;hpb=4598dd7067fb84d53913acaf80d0df585ba4d0f7 diff --git a/folly/experimental/fibers/AddTasks.h b/folly/experimental/fibers/AddTasks.h index 9e3019d3..be4c25b1 100644 --- a/folly/experimental/fibers/AddTasks.h +++ b/folly/experimental/fibers/AddTasks.h @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -49,6 +50,8 @@ class TaskIterator { public: typedef T value_type; + TaskIterator() : fm_(FiberManager::getFiberManager()) {} + // not copyable TaskIterator(const TaskIterator& other) = delete; TaskIterator& operator=(const TaskIterator& other) = delete; @@ -57,6 +60,14 @@ class TaskIterator { TaskIterator(TaskIterator&& other) noexcept; TaskIterator& operator=(TaskIterator&& other) = delete; + /** + * Add one more task to the TaskIterator. + * + * @param func task to be added, will be scheduled on current FiberManager + */ + template + void addTask(F&& func); + /** * @return True if there are tasks immediately available to be consumed (no * need to await on them). @@ -111,10 +122,9 @@ class TaskIterator { size_t tasksToFulfillPromise{0}; }; - std::shared_ptr context_; - size_t id_; - - explicit TaskIterator(std::shared_ptr context); + std::shared_ptr context_{std::make_shared()}; + size_t id_{std::numeric_limits::max()}; + FiberManager& fm_; folly::Try awaitNextResult(); };