You.i Engine
YiStaticTask.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_STATIC_TASK_H_
3 #define _YI_STATIC_TASK_H_
4 
5 #include "thread/YiTask.h"
6 
36 template <typename ResultType = void>
37 class CYIStaticTask : public CYITask<ResultType>
38 {
39 public:
43  CYIStaticTask(CYIFuture<ResultType> &rFuture, ResultType (* const pFunc)());
44 
49  template <typename P1>
50  CYIStaticTask(CYIFuture<ResultType> &rFuture, ResultType (* const pFunc)(P1), P1 const &funcParam1);
51 
56  template <typename P1, typename P2>
57  CYIStaticTask(CYIFuture<ResultType> &rFuture, ResultType (* const pFunc)(P1, P2), P1 const &funcParam1, P2 const &funcParam2);
58 
63  template <typename P1, typename P2, typename P3>
64  CYIStaticTask(CYIFuture<ResultType> &rFuture, ResultType (* const pFunc)(P1, P2, P3), P1 const &funcParam1, P2 const &funcParam2, P3 const &funcParam3);
65 
70  template <typename P1, typename P2, typename P3, typename P4>
71  CYIStaticTask(CYIFuture<ResultType> &rFuture, ResultType (* const pFunc)(P1, P2, P3, P4), P1 const &funcParam1, P2 const &funcParam2, P3 const &funcParam3, P4 const &funcParam4);
72 
76  CYIStaticTask(std::unique_ptr<CYIFuture<ResultType>> pFuture, ResultType (*const pFunc)());
77 
82  template<typename P1>
83  CYIStaticTask(std::unique_ptr<CYIFuture<ResultType>> pFuture, ResultType (*const pFunc)(P1), P1 const &funcParam1);
84 
89  template<typename P1, typename P2>
90  CYIStaticTask(std::unique_ptr<CYIFuture<ResultType>> pFuture, ResultType (*const pFunc)(P1, P2), P1 const &funcParam1, P2 const &funcParam2);
91 
96  template<typename P1, typename P2, typename P3>
97  CYIStaticTask(std::unique_ptr<CYIFuture<ResultType>> pFuture, ResultType (*const pFunc)(P1, P2, P3), P1 const &funcParam1, P2 const &funcParam2, P3 const &funcParam3);
98 
103  template<typename P1, typename P2, typename P3, typename P4>
104  CYIStaticTask(std::unique_ptr<CYIFuture<ResultType>> pFuture, ResultType (*const pFunc)(P1, P2, P3, P4), P1 const &funcParam1, P2 const &funcParam2, P3 const &funcParam3, P4 const &funcParam4);
105 
109  CYIStaticTask(ResultType (* const pFunc)());
110 
115  template <typename P1>
116  CYIStaticTask(ResultType (* const pFunc)(P1), P1 const &funcParam1);
117 
122  template <typename P1, typename P2>
123  CYIStaticTask(ResultType (* const pFunc)(P1, P2), P1 const &funcParam1, P2 const &funcParam2);
124 
129  template <typename P1, typename P2, typename P3>
130  CYIStaticTask(ResultType (* const pFunc)(P1, P2, P3), P1 const &funcParam1, P2 const &funcParam2, P3 const &funcParam3);
131 
136  template <typename P1, typename P2, typename P3, typename P4>
137  CYIStaticTask(ResultType (* const pFunc)(P1, P2, P3, P4), P1 const &funcParam1, P2 const &funcParam2, P3 const &funcParam3, P4 const &funcParam4);
138 
139 
140  virtual ~CYIStaticTask();
141 
142 protected:
148  virtual ResultType Run() override;
149 
150 private:
154  class CYIStaticTaskDataBase
155  {
156  public:
157  virtual ~CYIStaticTaskDataBase();
158  virtual const ResultType ExecuteFunction() = 0;
159  };
160 
161 private:
162  CYIStaticTaskDataBase *m_pFunctionData;
163 
164 private:
165  class CYIStaticTaskData0Args : public CYIStaticTaskDataBase
166  {
167  public:
168  CYIStaticTaskData0Args(ResultType (* const pFunc)());
169  virtual const ResultType ExecuteFunction() override;
170 
171  private:
172  ResultType (*m_pFunc)();
173  };
174 
175  template <typename P1>
176  class CYIStaticTaskData1Arg : public CYIStaticTaskDataBase
177  {
178  public:
179  CYIStaticTaskData1Arg(ResultType (* const pFunc)(P1), P1 const &funcParam1);
180  virtual const ResultType ExecuteFunction() override;
181 
182  private:
183  ResultType (*m_pFunc)(P1);
184  P1 m_arg1;
185  };
186 
187  template <typename P1, typename P2>
188  class CYIStaticTaskData2Args : public CYIStaticTaskDataBase
189  {
190  public:
191  CYIStaticTaskData2Args(ResultType (* const pFunc)(P1, P2), P1 const &funcParam1, P2 const &funcParam2);
192  virtual const ResultType ExecuteFunction() override;
193 
194  private:
195  ResultType (*m_pFunc)(P1, P2);
196  P1 m_arg1;
197  P2 m_arg2;
198  };
199 
200  template <typename P1, typename P2, typename P3>
201  class CYIStaticTaskData3Args : public CYIStaticTaskDataBase
202  {
203  public:
204  CYIStaticTaskData3Args(ResultType (* const pFunc)(P1, P2, P3), P1 const &funcParam1, P2 const &funcParam2, P3 const &funcParam3);
205  virtual const ResultType ExecuteFunction() override;
206 
207  private:
208  ResultType (*m_pFunc)(P1, P2, P3);
209  P1 m_arg1;
210  P2 m_arg2;
211  P3 m_arg3;
212  };
213 
214  template <typename P1, typename P2, typename P3, typename P4>
215  class CYIStaticTaskData4Args : public CYIStaticTaskDataBase
216  {
217  public:
218  CYIStaticTaskData4Args(ResultType (* const pFunc)(P1, P2, P3, P4), P1 const &funcParam1, P2 const &funcParam2, P3 const &funcParam3, P4 const &funcParam4);
219  virtual const ResultType ExecuteFunction() override;
220 
221  private:
222  ResultType (*m_pFunc)(P1, P2, P3, P4);
223  P1 m_arg1;
224  P2 m_arg2;
225  P3 m_arg3;
226  P4 m_arg4;
227  };
228 };
229 
234 #include "YiStaticTask.inl"
235 
236 #endif // _YI_STATIC_TASK_H_
Definition: YiStaticTask.h:37
Definition: YiTask.h:168
Definition: YiFuture.h:139
virtual ResultType Run() override
CYIStaticTask(CYIFuture< ResultType > &rFuture, ResultType(*const pFunc)())
virtual ~CYIStaticTask()