Add mailbox task's factory functions

This commit is contained in:
XieHan
2021-06-20 17:38:22 +08:00
parent f724c5cfa0
commit 0d151c1a7d
3 changed files with 39 additions and 0 deletions
+8
View File
@@ -620,6 +620,14 @@ public:
this->mailbox = mailbox;
}
WFMailboxTask(std::function<void (WFMailboxTask *)>&& cb) :
next(&this->user_data),
value(2),
callback(std::move(cb))
{
this->mailbox = &this->user_data;
}
protected:
virtual ~WFMailboxTask() { }
};
+27
View File
@@ -293,6 +293,33 @@ void WFTaskFactory::count_by_name(const std::string& counter_name, unsigned int
__CounterMap::get_instance()->count_n(counter_name, n);
}
/********MailboxTask*************/
class __WFMailboxTask : public WFMailboxTask
{
public:
__WFMailboxTask(size_t size, mailbox_callback_t&& cb) :
WFMailboxTask(new void *[size], size, std::move(cb))
{
}
virtual ~__WFMailboxTask()
{
delete []this->mailbox;
}
};
WFMailboxTask *WFTaskFactory::create_mailbox_task(size_t size,
mailbox_callback_t callback)
{
return new __WFMailboxTask(size, std::move(callback));
}
WFMailboxTask *WFTaskFactory::create_mailbox_task(mailbox_callback_t callback)
{
return new WFMailboxTask(std::move(callback));
}
/********FileIOTask*************/
class WFFilepreadTask : public WFFileIOTask
+4
View File
@@ -90,6 +90,7 @@ using fsync_callback_t = std::function<void (WFFileSyncTask *)>;
using timer_callback_t = std::function<void (WFTimerTask *)>;
using counter_callback_t = std::function<void (WFCounterTask *)>;
// Mailbox is like counter with data passing
using mailbox_callback_t = std::function<void (WFMailboxTask *)>;
// Graph (DAG) task.
@@ -229,6 +230,9 @@ public:
static WFMailboxTask *create_mailbox_task(size_t size,
mailbox_callback_t callback);
/* Use 'user_data' as mailbox. Store only one message. */
static WFMailboxTask *create_mailbox_task(mailbox_callback_t callback);
public:
template<class FUNC, class... ARGS>
static WFGoTask *create_go_task(const std::string& queue_name,