diff options
author | Steve Block <steveblock@google.com> | 2010-08-04 11:41:34 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-08-09 12:04:44 +0100 |
commit | db14019a23d96bc8a444b6576a5da8bd1cfbc8b0 (patch) | |
tree | 9f793c5b0f5e1f2aca8247158920e2c4bf962bbf /WebCore/html/FileThreadTask.h | |
parent | bf916837aa84f1e4b00e6ed6268516c2acd27545 (diff) | |
download | external_webkit-db14019a23d96bc8a444b6576a5da8bd1cfbc8b0.zip external_webkit-db14019a23d96bc8a444b6576a5da8bd1cfbc8b0.tar.gz external_webkit-db14019a23d96bc8a444b6576a5da8bd1cfbc8b0.tar.bz2 |
Merge WebKit at r64523 : Initial merge by git.
Change-Id: Ibb796c6802e757b1d9b40f58205cfbe4da95fcd4
Diffstat (limited to 'WebCore/html/FileThreadTask.h')
-rw-r--r-- | WebCore/html/FileThreadTask.h | 134 |
1 files changed, 58 insertions, 76 deletions
diff --git a/WebCore/html/FileThreadTask.h b/WebCore/html/FileThreadTask.h index de11798..09b647f 100644 --- a/WebCore/html/FileThreadTask.h +++ b/WebCore/html/FileThreadTask.h @@ -32,73 +32,55 @@ #define FileThreadTask_h #include "CrossThreadCopier.h" +#include "CrossThreadTask.h" #include "FileThread.h" -#include <memory> #include <wtf/PassOwnPtr.h> #include <wtf/PassRefPtr.h> -#include <wtf/TypeTraits.h> namespace WebCore { -// Traits for the Task. -template<typename T> struct FileThreadTaskTraits { - typedef const T& ParamType; -}; - -template<typename T> struct FileThreadTaskTraits<T*> { - typedef T* ParamType; -}; - -template<typename T> struct FileThreadTaskTraits<PassRefPtr<T> > { - typedef PassRefPtr<T> ParamType; -}; - -template<typename T> struct FileThreadTaskTraits<PassOwnPtr<T> > { - typedef PassOwnPtr<T> ParamType; -}; - -template<typename R> +template<typename R, typename T> class FileThreadTask0 : public FileThread::Task { public: - typedef R (FileStream::*Method)(); - typedef FileThreadTask0<R> FileThreadTask; + typedef R (T::*Method)(); + typedef FileThreadTask0<R, T> FileThreadTaskImpl; - static PassOwnPtr<FileThreadTask> create(FileStream* stream, Method method) + static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method) { - return new FileThreadTask(stream, method); + return new FileThreadTaskImpl(instance, method); } private: - FileThreadTask0(FileStream* stream, Method method) - : FileThread::Task(stream) + FileThreadTask0(T* instance, Method method) + : FileThread::Task(instance) , m_method(method) { } virtual void performTask() { - (*stream().*m_method)(); + (*static_cast<T*>(instance()).*m_method)(); } private: Method m_method; }; -template<typename R, typename P1, typename MP1> +template<typename R, typename T, typename P1, typename MP1> class FileThreadTask1 : public FileThread::Task { public: - typedef R (FileStream::*Method)(MP1); - typedef FileThreadTask1<R, P1, MP1> FileThreadTask; - typedef typename FileThreadTaskTraits<P1>::ParamType Param1; + typedef R (T::*Method)(MP1); + typedef FileThreadTask1<R, T, P1, MP1> FileThreadTaskImpl; + typedef typename CrossThreadTaskTraits<P1>::ParamType Param1; - static PassOwnPtr<FileThreadTask> create(FileStream* stream, Method method, Param1 parameter1) + static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method, Param1 parameter1) { - return new FileThreadTask(stream, method, parameter1); + return new FileThreadTaskImpl(instance, method, parameter1); } private: - FileThreadTask1(FileStream* stream, Method method, Param1 parameter1) - : FileThread::Task(stream) + FileThreadTask1(T* instance, Method method, Param1 parameter1) + : FileThread::Task(instance) , m_method(method) , m_parameter1(parameter1) { @@ -106,7 +88,7 @@ private: virtual void performTask() { - (*stream().*m_method)(m_parameter1); + (*static_cast<T*>(instance()).*m_method)(m_parameter1); } private: @@ -114,22 +96,22 @@ private: P1 m_parameter1; }; -template<typename R, typename P1, typename MP1, typename P2, typename MP2> +template<typename R, typename T, typename P1, typename MP1, typename P2, typename MP2> class FileThreadTask2 : public FileThread::Task { public: - typedef R (FileStream::*Method)(MP1, MP2); - typedef FileThreadTask2<R, P1, MP1, P2, MP2> FileThreadTask; - typedef typename FileThreadTaskTraits<P1>::ParamType Param1; - typedef typename FileThreadTaskTraits<P2>::ParamType Param2; + typedef R (T::*Method)(MP1, MP2); + typedef FileThreadTask2<R, T, P1, MP1, P2, MP2> FileThreadTaskImpl; + typedef typename CrossThreadTaskTraits<P1>::ParamType Param1; + typedef typename CrossThreadTaskTraits<P2>::ParamType Param2; - static PassOwnPtr<FileThreadTask> create(FileStream* stream, Method method, Param1 parameter1, Param2 parameter2) + static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method, Param1 parameter1, Param2 parameter2) { - return new FileThreadTask(stream, method, parameter1, parameter2); + return new FileThreadTaskImpl(instance, method, parameter1, parameter2); } private: - FileThreadTask2(FileStream* stream, Method method, Param1 parameter1, Param2 parameter2) - : FileThread::Task(stream) + FileThreadTask2(T* instance, Method method, Param1 parameter1, Param2 parameter2) + : FileThread::Task(instance) , m_method(method) , m_parameter1(parameter1) , m_parameter2(parameter2) @@ -138,7 +120,7 @@ private: virtual void performTask() { - (*stream().*m_method)(m_parameter1, m_parameter2); + (*static_cast<T*>(instance()).*m_method)(m_parameter1, m_parameter2); } private: @@ -147,23 +129,23 @@ private: P2 m_parameter2; }; -template<typename R, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3> +template<typename R, typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3> class FileThreadTask3 : public FileThread::Task { public: - typedef R (FileStream::*Method)(MP1, MP2, MP3); - typedef FileThreadTask3<R, P1, MP1, P2, MP2, P3, MP3> FileThreadTask; - typedef typename FileThreadTaskTraits<P1>::ParamType Param1; - typedef typename FileThreadTaskTraits<P2>::ParamType Param2; - typedef typename FileThreadTaskTraits<P3>::ParamType Param3; + typedef void (T::*Method)(MP1, MP2, MP3); + typedef FileThreadTask3<R, T, P1, MP1, P2, MP2, P3, MP3> FileThreadTaskImpl; + typedef typename CrossThreadTaskTraits<P1>::ParamType Param1; + typedef typename CrossThreadTaskTraits<P2>::ParamType Param2; + typedef typename CrossThreadTaskTraits<P3>::ParamType Param3; - static PassOwnPtr<FileThreadTask> create(FileStream* stream, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3) + static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3) { - return new FileThreadTask(stream, method, parameter1, parameter2, parameter3); + return new FileThreadTaskImpl(instance, method, parameter1, parameter2, parameter3); } private: - FileThreadTask3(FileStream* stream, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3) - : FileThread::Task(stream) + FileThreadTask3(T* instance, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3) + : FileThread::Task(instance) , m_method(method) , m_parameter1(parameter1) , m_parameter2(parameter2) @@ -173,7 +155,7 @@ private: virtual void performTask() { - (*stream().*m_method)(m_parameter1, m_parameter2, m_parameter3); + (*static_cast<T*>(instance()).*m_method)(m_parameter1, m_parameter2, m_parameter3); } private: @@ -183,56 +165,56 @@ private: P3 m_parameter3; }; -template<typename R> +template<typename R, typename T> PassOwnPtr<FileThread::Task> createFileThreadTask( - FileStream* const callee, - R (FileStream::*method)()); + T* const callee, + R (T::*method)()); -template<typename R> +template<typename R, typename T> PassOwnPtr<FileThread::Task> createFileThreadTask( - FileStream* const callee, - R (FileStream::*method)()) + T* const callee, + R (T::*method)()) { - return FileThreadTask0<R>::create( + return FileThreadTask0<R, T>::create( callee, method); } -template<typename R, typename P1, typename MP1> +template<typename R, typename T, typename P1, typename MP1> PassOwnPtr<FileThread::Task> createFileThreadTask( - FileStream* const callee, - R (FileStream::*method)(MP1), + T* const callee, + R (T::*method)(MP1), const P1& parameter1) { - return FileThreadTask1<R, typename CrossThreadCopier<P1>::Type, MP1>::create( + return FileThreadTask1<R, T, typename CrossThreadCopier<P1>::Type, MP1>::create( callee, method, CrossThreadCopier<P1>::copy(parameter1)); } -template<typename R, typename P1, typename MP1, typename P2, typename MP2> +template<typename R, typename T, typename P1, typename MP1, typename P2, typename MP2> PassOwnPtr<FileThread::Task> createFileThreadTask( - FileStream* const callee, - R (FileStream::*method)(MP1, MP2), + T* const callee, + R (T::*method)(MP1, MP2), const P1& parameter1, const P2& parameter2) { - return FileThreadTask2<R, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2>::create( + return FileThreadTask2<R, T, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2>::create( callee, method, CrossThreadCopier<P1>::copy(parameter1), CrossThreadCopier<P2>::copy(parameter2)); } -template<typename R, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3> +template<typename R, typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3> PassOwnPtr<FileThread::Task> createFileThreadTask( - FileStream* const callee, - R (FileStream::*method)(MP1, MP2, MP3), + T* const callee, + R (T::*method)(MP1, MP2, MP3), const P1& parameter1, const P2& parameter2, const P3& parameter3) { - return FileThreadTask3<R, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3>::create( + return FileThreadTask3<R, T, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3>::create( callee, method, CrossThreadCopier<P1>::copy(parameter1), |