1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef FWL_THREAD_H_ 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FWL_THREAD_H_ 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// The FWL thread/app code contains three parallel inheritance hierarchies, 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// which reference each other via pointers as follows: 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// m_pImpl 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// (nonesuch) IFWL_Thread ----------> CFWL_ThreadImp 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// | <---------- | 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// A m_pIface A 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// | | 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// (nonesuch) IFWL_NoteThread CFWL_NoteThreadImp 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// | | 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// A A 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// m_pIface | | 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// CFWL_App --------------> IFWL_App CFWL_AppImp 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFWL_ThreadImp; 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFWL_NoteDriver; 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmanntypedef struct _FWL_HTHREAD { void* pData; } * FWL_HTHREAD; 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFWL_Thread { 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // These call into polymorphic methods in the impl; no need to override. 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void Release(); 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FWL_ERR Run(FWL_HTHREAD hThread); 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFWL_ThreadImp* GetImpl() const { return m_pImpl; } 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void SetImpl(CFWL_ThreadImp* pImpl) { m_pImpl = pImpl; } 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann protected: 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann virtual ~IFWL_Thread() {} 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann private: 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFWL_ThreadImp* m_pImpl; 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass IFWL_NoteThread : public IFWL_Thread { 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IFWL_NoteDriver* GetNoteDriver(); 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif // FWL_THREAD_H_ 52