GenericWorkerTask.h [plain text]
#ifndef GenericWorkerTask_h
#define GenericWorkerTask_h
#if ENABLE(WORKERS)
#include "WorkerMessagingProxy.h"
#include "ScriptExecutionContext.h"
#include <wtf/PassRefPtr.h>
namespace WebCore {
class GenericWorkerTaskBase : public ScriptExecutionContext::Task {
protected:
GenericWorkerTaskBase(WorkerMessagingProxy* messagingProxy) : m_messagingProxy(messagingProxy)
{
}
bool canPerformTask()
{
return !m_messagingProxy->askedToTerminate();
}
WorkerMessagingProxy* m_messagingProxy;
};
template<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6>
class GenericWorkerTask6 : public GenericWorkerTaskBase {
public:
typedef void (*Method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6);
typedef GenericWorkerTask6<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP6> GenericWorkerTask;
static PassRefPtr<GenericWorkerTask> create(WorkerMessagingProxy* messagingProxy, Method method, const P1& parameter1, const P2& parameter2, const P3& parameter3, const P4& parameter4, const P5& parameter5, const P6& parameter6)
{
return adoptRef(new GenericWorkerTask(messagingProxy, method, parameter1, parameter2, parameter3, parameter4, parameter5, parameter6));
}
private:
GenericWorkerTask6(WorkerMessagingProxy* messagingProxy, Method method, const P1& parameter1, const P2& parameter2, const P3& parameter3, const P4& parameter4, const P5& parameter5, const P6& parameter6)
: GenericWorkerTaskBase(messagingProxy)
, m_method(method)
, m_parameter1(parameter1)
, m_parameter2(parameter2)
, m_parameter3(parameter3)
, m_parameter4(parameter4)
, m_parameter5(parameter5)
, m_parameter6(parameter6)
{
}
virtual void performTask(ScriptExecutionContext* context)
{
if (!canPerformTask())
return;
(*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_parameter4, m_parameter5, m_parameter6);
}
private:
Method m_method;
P1 m_parameter1;
P2 m_parameter2;
P3 m_parameter3;
P4 m_parameter4;
P5 m_parameter5;
P6 m_parameter6;
};
template<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6>
PassRefPtr<GenericWorkerTask6<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP6> > createCallbackTask(
WorkerMessagingProxy* messagingProxy,
void (*method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6),
const P1& parameter1, const P2& parameter2, const P3& parameter3, const P4& parameter4, const P5& parameter5, const P6& parameter6)
{
return GenericWorkerTask6<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP6>::create(messagingProxy, method, parameter1, parameter2, parameter3, parameter4, parameter5, parameter6);
}
}
#endif // ENABLE(WORKERS)
#endif // GenericWorkerTask_h