// Copyright 2014 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef XFA_INCLUDE_FWL_CORE_FWL_THREAD_H_ #define XFA_INCLUDE_FWL_CORE_FWL_THREAD_H_ // The FWL thread/app code contains three parallel inheritance hierarchies, // which reference each other via pointers as follows: // // m_pImpl // (nonesuch) IFWL_Thread ----------> CFWL_ThreadImp // | <---------- | // A m_pIface A // | | // (nonesuch) IFWL_NoteThread CFWL_NoteThreadImp // | | // A A // m_pIface | | // CFWL_App --------------> IFWL_App CFWL_AppImp // class CFWL_ThreadImp; class IFWL_NoteDriver; typedef struct _FWL_HTHREAD { void* pData; } * FWL_HTHREAD; class IFWL_Thread { public: // These call into polymorphic methods in the impl; no need to override. void Release(); FWL_ERR Run(FWL_HTHREAD hThread); CFWL_ThreadImp* GetImpl() const { return m_pImpl; } void SetImpl(CFWL_ThreadImp* pImpl) { m_pImpl = pImpl; } protected: virtual ~IFWL_Thread() {} private: CFWL_ThreadImp* m_pImpl; }; class IFWL_NoteThread : public IFWL_Thread { public: IFWL_NoteDriver* GetNoteDriver(); }; #endif // XFA_INCLUDE_FWL_CORE_FWL_THREAD_H_