#ifndef __OTX_FLASH_TASK_HPP__
#define __OTX_FLASH_TASK_HPP__

#include <mutex>
#include <queue>

namespace otx {
namespace flash {

class Task;
typedef void (*TaskCB)(Task *);

class Task {
public:
  Task(TaskCB cb, TaskCB cancelCb, void *userState);
  Task(const Task &right) = default;
  Task &operator=(const Task &right) = default;
  virtual ~Task() = default;

private:
  void *mUserState;// 用户自定义参数。
  TaskCB mCB;// 任务执行体。
  TaskCB mCancelCb; // 任务在队列中被取消时调用，外部使用该机制释放内存。

public:
  void *getUserState();
  void execute();
  void cancel();
};
} // namespace flash
} // namespace otx

#endif // __OTX_FLASH_TASKPOOL_HPP__