equal
deleted
inserted
replaced
19 |
19 |
20 |
20 |
21 |
21 |
22 |
22 |
23 #include "RSenDocument.h" |
23 #include "RSenDocument.h" |
24 #include <xml/utils/xmlengxestd.h> |
24 #include <xmlengxestd.h> |
25 #include <xml/dom/xmlengdomimplementation.h> |
25 #include <xmlengdomimplementation.h> |
26 |
26 |
27 LOCAL_C void CleanupRSenDocument(TAny* aDocumentData) |
27 LOCAL_C void CleanupRSenDocument(TAny* aDocumentData) |
28 { |
28 { |
29 TSenDocumentData* pData = |
29 TSenDocumentData* pData = |
30 REINTERPRET_CAST(TSenDocumentData*, aDocumentData); |
30 REINTERPRET_CAST(TSenDocumentData*, aDocumentData); |
57 RXmlEngDOMImplementation domImpl; |
57 RXmlEngDOMImplementation domImpl; |
58 domImpl.OpenL(); |
58 domImpl.OpenL(); |
59 RXmlEngDocument doc; |
59 RXmlEngDocument doc; |
60 doc.OpenL(domImpl); |
60 doc.OpenL(domImpl); |
61 RSenDocument document; |
61 RSenDocument document; |
62 CleanupClosePushL(document); |
|
63 document.ipData = NULL; |
|
64 document.iInternal = NULL; |
|
65 document.ipData = new (ELeave) TSenDocumentData; |
62 document.ipData = new (ELeave) TSenDocumentData; |
66 document.iInternal = |
63 document.iInternal = |
67 (reinterpret_cast<RSenDocument*>(const_cast<RXmlEngDocument*>(&doc)))->iInternal; |
64 (reinterpret_cast<RSenDocument*>(const_cast<RXmlEngDocument*>(&doc)))->iInternal; |
68 document.ipData->iInternal = document.iInternal; |
65 document.ipData->iInternal = document.iInternal; |
69 document.ipData->ipOpenDocuments = NULL; |
|
70 document.ipData->ipOpenDocuments = new (ELeave) TInt(1); |
66 document.ipData->ipOpenDocuments = new (ELeave) TInt(1); |
71 document.ipData->iDomImpl = domImpl; |
67 document.ipData->iDomImpl = domImpl; |
72 CleanupStack::Pop(); |
|
73 TCleanupItem cleanup(CleanupRSenDocument, document.ipData); |
68 TCleanupItem cleanup(CleanupRSenDocument, document.ipData); |
74 CleanupStack::PushL(cleanup); |
69 CleanupStack::PushL(cleanup); |
75 return document; |
70 return document; |
76 } |
71 } |
77 |
72 |
92 RXmlEngDOMImplementation domImpl; |
87 RXmlEngDOMImplementation domImpl; |
93 domImpl.OpenL(); |
88 domImpl.OpenL(); |
94 RXmlEngDocument doc; |
89 RXmlEngDocument doc; |
95 doc.OpenL(domImpl, aInternal); |
90 doc.OpenL(domImpl, aInternal); |
96 RSenDocument document; |
91 RSenDocument document; |
97 CleanupClosePushL(document); |
|
98 document.ipData = NULL; |
|
99 document.iInternal = NULL; |
|
100 document.ipData = new (ELeave) TSenDocumentData; |
92 document.ipData = new (ELeave) TSenDocumentData; |
101 document.iInternal = |
93 document.iInternal = |
102 (reinterpret_cast<RSenDocument*>(const_cast<RXmlEngDocument*>(&doc)))->iInternal; |
94 (reinterpret_cast<RSenDocument*>(const_cast<RXmlEngDocument*>(&doc)))->iInternal; |
103 document.ipData->iInternal = document.iInternal; |
95 document.ipData->iInternal = document.iInternal; |
104 document.ipData->ipOpenDocuments = NULL; |
|
105 document.ipData->ipOpenDocuments = new (ELeave) TInt(1); |
96 document.ipData->ipOpenDocuments = new (ELeave) TInt(1); |
106 document.ipData->iDomImpl = domImpl; |
97 document.ipData->iDomImpl = domImpl; |
107 CleanupStack::Pop(); |
|
108 TCleanupItem cleanup(CleanupRSenDocument, document.ipData); |
98 TCleanupItem cleanup(CleanupRSenDocument, document.ipData); |
109 CleanupStack::PushL(cleanup); |
99 CleanupStack::PushL(cleanup); |
110 return document; |
100 return document; |
111 } |
101 } |
112 |
102 |
116 return *this; |
106 return *this; |
117 } |
107 } |
118 |
108 |
119 EXPORT_C void RSenDocument::Close() |
109 EXPORT_C void RSenDocument::Close() |
120 { |
110 { |
121 if(ipData && ipData->ipOpenDocuments) |
111 *ipData->ipOpenDocuments = *ipData->ipOpenDocuments - 1; |
122 { |
112 if ( !*ipData->ipOpenDocuments ) |
123 *ipData->ipOpenDocuments = *ipData->ipOpenDocuments - 1; |
113 { |
124 if ( !*ipData->ipOpenDocuments ) |
114 RXmlEngDOMImplementation domImpl = ipData->iDomImpl; |
125 { |
115 iInternal = ipData->iInternal; |
126 RXmlEngDOMImplementation domImpl = ipData->iDomImpl; |
116 delete ipData->ipOpenDocuments; |
127 iInternal = ipData->iInternal; |
117 delete ipData; |
128 delete ipData->ipOpenDocuments; |
118 RXmlEngDocument::Close(); |
129 delete ipData; |
119 domImpl.Close(); |
130 RXmlEngDocument::Close(); |
120 TBool* pDisabled = (TBool*)Dll::Tls(); |
131 domImpl.Close(); |
121 if ( !pDisabled ) |
132 TBool* pDisabled = (TBool*)Dll::Tls(); |
122 { |
133 if ( !pDisabled ) |
123 XmlEngineCleanup(); |
134 { |
124 } |
135 XmlEngineCleanup(); |
125 } |
136 } |
126 else |
137 } |
127 { |
138 else |
128 iInternal = NULL; |
139 { |
129 } |
140 iInternal = NULL; |
130 |
141 } |
|
142 } |
|
143 } |
131 } |
144 |
132 |
145 EXPORT_C void RSenDocument::Destroy() |
133 EXPORT_C void RSenDocument::Destroy() |
146 { |
134 { |
147 RSenDocument::Close(); |
135 RSenDocument::Close(); |