webservices/wsfragment/src/rsendocument.cpp
branchRCL_3
changeset 37 1adb97a15c2f
parent 36 c5fabff9b552
equal deleted inserted replaced
36:c5fabff9b552 37:1adb97a15c2f
    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();