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