Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fdp / src / css / fde_csscache.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _FDE_CSSCACHE\r
8 #define _FDE_CSSCACHE\r
9 typedef struct _FDE_CSSCACHEITEM : public CFX_Target {\r
10     _FDE_CSSCACHEITEM(IFDE_CSSStyleSheet *p);\r
11     ~_FDE_CSSCACHEITEM();\r
12     IFDE_CSSStyleSheet                          *pStylesheet;\r
13     FX_DWORD                                            dwActivity;\r
14 } FDE_CSSCACHEITEM, * FDE_LPCSSCACHEITEM;\r
15 class CFDE_CSSStyleSheetCache : public IFDE_CSSStyleSheetCache, public CFX_ThreadLock, public CFX_Target\r
16 {\r
17 public:\r
18     CFDE_CSSStyleSheetCache();\r
19     ~CFDE_CSSStyleSheetCache();\r
20     virtual void                                        Release()\r
21     {\r
22         FDE_Delete this;\r
23     }\r
24 \r
25     virtual void                                        SetMaxItems(FX_INT32 iMaxCount = 5)\r
26     {\r
27         FXSYS_assert(iMaxCount >= 3);\r
28         m_iMaxItems = iMaxCount;\r
29     }\r
30 \r
31     virtual void                                        AddStyleSheet(FX_BSTR szKey, IFDE_CSSStyleSheet *pStyleSheet);\r
32     virtual IFDE_CSSStyleSheet*         GetStyleSheet(FX_BSTR szKey) const;\r
33     virtual void                                        RemoveStyleSheet(FX_BSTR szKey);\r
34 protected:\r
35     void                                                        RemoveLowestActivityItem();\r
36     CFX_MapByteStringToPtr                      m_Stylesheets;\r
37     IFX_MEMAllocator                            *m_pFixedStore;\r
38     FX_INT32                                            m_iMaxItems;\r
39 };\r
40 typedef struct _FDE_CSSTAGCACHE : public CFX_Target {\r
41 public:\r
42     _FDE_CSSTAGCACHE(_FDE_CSSTAGCACHE *parent, IFDE_CSSTagProvider *tag);\r
43     _FDE_CSSTAGCACHE(const _FDE_CSSTAGCACHE &it);\r
44     _FDE_CSSTAGCACHE*                           GetParent() const\r
45     {\r
46         return pParent;\r
47     }\r
48     IFDE_CSSTagProvider*                        GetTag() const\r
49     {\r
50         return pTag;\r
51     }\r
52     FX_DWORD                                            HashID() const\r
53     {\r
54         return dwIDHash;\r
55     }\r
56     FX_DWORD                                            HashTag() const\r
57     {\r
58         return dwTagHash;\r
59     }\r
60     FX_INT32                                            CountHashClass() const\r
61     {\r
62         return dwClassHashs.GetSize();\r
63     }\r
64     void                                                        SetClassIndex(FX_INT32 index)\r
65     {\r
66         iClassIndex = index;\r
67     }\r
68     FX_DWORD                                            HashClass() const\r
69     {\r
70         return iClassIndex < dwClassHashs.GetSize() ? dwClassHashs.GetAt(iClassIndex) : 0;\r
71     }\r
72 protected:\r
73     IFDE_CSSTagProvider                         *pTag;\r
74     _FDE_CSSTAGCACHE                            *pParent;\r
75     FX_DWORD                                            dwIDHash;\r
76     FX_DWORD                                            dwTagHash;\r
77     FX_INT32                                            iClassIndex;\r
78     CFDE_DWordArray                                     dwClassHashs;\r
79 } FDE_CSSTAGCACHE, * FDE_LPCSSTAGCACHE;\r
80 typedef CFX_ObjectStackTemplate<FDE_CSSTAGCACHE> CFDE_CSSTagStack;\r
81 class CFDE_CSSAccelerator : public IFDE_CSSAccelerator, public CFX_Target\r
82 {\r
83 public:\r
84     virtual void                                        OnEnterTag(IFDE_CSSTagProvider *pTag);\r
85     virtual void                                        OnLeaveTag(IFDE_CSSTagProvider *pTag);\r
86     void                                                        Clear()\r
87     {\r
88         m_Stack.RemoveAll();\r
89     }\r
90     FDE_LPCSSTAGCACHE                           GetTopElement() const\r
91     {\r
92         return m_Stack.GetTopElement();\r
93     }\r
94 protected:\r
95     CFDE_CSSTagStack                            m_Stack;\r
96 };\r
97 #endif\r