--- a/memana/analyzetoolclient/commandlineengine/internal/src/CATDataSaver.cpp Thu Feb 11 15:52:57 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,860 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: Definitions for the class CATDataSaver.
-*
-*/
-
-
-#include "../inc/catdatasaver.h"
-
-#include <xercesc/util/OutOfMemoryException.hpp>
-
-#if defined(XERCES_NEW_IOSTREAMS)
-#include <iostream>
-#else
-#include <iostream.h>
-#endif
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::CATDataSaver
-// Constructor.
-// -----------------------------------------------------------------------------
-CATDataSaver::CATDataSaver( void )
-{
- LOG_FUNC_ENTRY("CATDataSaver::CATDataSaver");
- m_iLoggingLevel = DEFAULT_LOGGING_LEVEL;
- m_bPrintImmediately = true;
- m_bXMLInitOk = false;
- m_bUdebBuild = true;
-
- m_iRunNumber = 1;
-
- m_pDomDoc = NULL;
- m_pRootElem = NULL;
- m_Serializer = NULL;
- m_pCurrentLeakElem = NULL;
- m_pRunElement = NULL;
- m_pMemoryLeaks = NULL;
- m_pHandleLeaks = NULL;
- m_pCurrentSubTestElem = NULL;
- m_pSubtestMemoryLeaks = NULL;
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::~CATDataSaver
-// Destructor.
-// -----------------------------------------------------------------------------
-CATDataSaver::~CATDataSaver(void)
-{
- LOG_FUNC_ENTRY("CATDataSaver::~CATDataSaver");
- if( m_bXMLInitOk )
- {
- if( m_Serializer )
- delete m_Serializer;
-
- m_pDomDoc->release();
- xercesc::XMLPlatformUtils::Terminate();
- }
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::SaveLinesToFile
-// Gets logging level.
-// -----------------------------------------------------------------------------
-void CATDataSaver::SaveLinesToFile( const char* pFileName, int iDataToSave )
-{
- LOG_FUNC_ENTRY("CATDataSaver::SaveLinesToFile");
-
- // Nothing to print?
- if( m_vLines.empty() )
- {
- printf( "No output data." );
- return;
- }
- if( iDataToSave != XML_DATA )
- {
- ofstream out( pFileName );
-
- if( !out.good() )
- {
- printf( "Can not open file: %s\n", pFileName );
- return;
- }
- switch( iDataToSave )
- {
- case TEXT_DATA:
- for( int i = 0 ; i < (int)m_vLines.size() ; i++ )
- {
- out << m_vLines[i].c_str();
- }
- break;
- }
- out.close();
- }
- else
- {
- if( m_bXMLInitOk )
- {
- xercesc::XMLFormatTarget* myFormTarget = NULL;
- try
- {
- myFormTarget = new xercesc::LocalFileFormatTarget( pFileName );
- m_Serializer->writeNode(myFormTarget, *m_pDomDoc);
- }
- catch(...)
- {
- printf( "Can not save output file: %s.", pFileName );
- }
- if( myFormTarget )
- delete myFormTarget; //lint !e118
- }
- }
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::PrintLinesToScreen
-// Prints all saved lines to screen.
-// -----------------------------------------------------------------------------
-void CATDataSaver::PrintLinesToScreen( void )
-{
- LOG_FUNC_ENTRY("CATDataSaver::PrintLinesToScreen");
- // Nothing to print?
- if( m_vLines.empty() )
- {
- printf( "No output data." );
- return;
- }
- for( int i = 0 ; i < (int)m_vLines.size() ; i++ )
- {
- printf( m_vLines[i].c_str() );
- }
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::AddLineToFirst
-// Adds saved line to first in database.
-// -----------------------------------------------------------------------------
-void CATDataSaver::AddLineToFirst( void )
-{
- LOG_LOW_FUNC_ENTRY("CATDataSaver::AddLineToFirst");
- m_sLine.append( "\n" );
- m_vLines.insert( m_vLines.begin(), m_sLine );
- m_sLine.clear();
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::AddLineToLast
-// Adds saved line to last in database.
-// -----------------------------------------------------------------------------
-void CATDataSaver::AddLineToLast()
-{
- LOG_LOW_FUNC_ENTRY("CATDataSaver::AddLineToLast");
- m_sLine.append( "\n" );
-
- string sTempDataLine;
-
- m_vLines.push_back( m_sLine );
-
- SaveXML( m_sCarbideDataLine, ITEM );
-
- if( m_bPrintImmediately )
- {
- printf( m_sLine.c_str() );
- }
-
- m_sCarbideDataLine.clear();
- m_sLine.clear();
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::AddString
-// Adds string to current line.
-// -----------------------------------------------------------------------------
-void CATDataSaver::AddString( const char* pData, bool bSaveCarbideData )
-{
- LOG_LOW_FUNC_ENTRY("CATDataSaver::AddString");
- m_sLine.append( pData );
-
- if( bSaveCarbideData )
- {
- m_sCarbideDataLine.append( pData );
- m_sCarbideDataLine.append(";");
- }
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::AddInteger
-// Converts integer to string and adds it to current line.
-// -----------------------------------------------------------------------------
-void CATDataSaver::AddInteger( int iValue, bool bSaveCarbideData )
-{
- LOG_LOW_FUNC_ENTRY("CATDataSaver::AddInteger");
- char cTemp[128];
- string sValue( itoa( iValue, cTemp, 10 ) );
- m_sLine.append( sValue );
-
- if( bSaveCarbideData )
- {
- m_sCarbideDataLine.append( sValue );
- m_sCarbideDataLine.append(";");
- }
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::SetLoggingLevel
-// Sets logging level.
-// -----------------------------------------------------------------------------
-void CATDataSaver::SetLoggingLevel( int iLoggingLevel )
-{
- LOG_FUNC_ENTRY("CATDataSaver::SetLoggingLevel");
- // Check that new logging level is valid
- // Acceptable values are between MIN_LOGGING_LEVEL and
- // MAX_LOGGING_LEVEL including them
- if( iLoggingLevel >= MIN_LOGGING_LEVEL && iLoggingLevel <= MAX_LOGGING_LEVEL )
- {
- m_iLoggingLevel = iLoggingLevel;
- }
- else
- {
- // New logging level value is invalid => set default logging level
- m_iLoggingLevel = DEFAULT_LOGGING_LEVEL;
- }
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::GetLoggingLevel
-// Gets logging level.
-// -----------------------------------------------------------------------------
-int CATDataSaver::GetLoggingLevel( void )
-{
- LOG_LOW_FUNC_ENTRY("CATDataSaver::GetLoggingLevel");
- return m_iLoggingLevel;
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::SetPrintFlag
-// Sets print immediately flag.
-// -----------------------------------------------------------------------------
-void CATDataSaver::SetPrintFlag( bool bPrintImmediately )
-{
- LOG_FUNC_ENTRY("CATDataSaver::SetPrintFlag");
- m_bPrintImmediately = bPrintImmediately;
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::SaveCarbideDataHeader
-// Sets data header for Carbide data.
-// -----------------------------------------------------------------------------
-void CATDataSaver::SaveCarbideDataHeader( void )
-{
- LOG_FUNC_ENTRY("CATDataSaver::SaveCarbideDataHeader");
- SaveXML( m_sCarbideDataLine, LEAK );
- m_sCarbideDataLine.clear();
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::InitXML
-// Initializes xerces xml parser.
-// -----------------------------------------------------------------------------
-bool CATDataSaver::InitXML( void )
-{
- LOG_FUNC_ENTRY("CATDataSaver::InitXML");
- try
- {
- xercesc::XMLPlatformUtils::Initialize();
- }
- catch ( ... )//(const XMLException& toCatch)
- {
- // Do your failure processing here
- printf("XML initialization failed.\n");
- return false;
- }
- // Error code.
- int errorCode = 0;
- // getDomIMplementation returns null if source has none.
- xercesc::DOMImplementation* impl = xercesc::DOMImplementationRegistry::getDOMImplementation(L"Core");
- if (impl != NULL)
- {
- // Create new DOMWriter.
- m_Serializer = ((xercesc::DOMImplementationLS*)impl)->createDOMWriter();
- // New document.
- try
- {
- m_pDomDoc = impl->createDocument(
- 0, // Root element namespace URI.
- L"results", // Root element name
- 0); // Document type object (DTD).
-
- m_pRootElem = m_pDomDoc->getDocumentElement();
- }
- catch (const xercesc::OutOfMemoryException&)
- {
- XERCES_STD_QUALIFIER cerr << "OutOfMemoryException" << XERCES_STD_QUALIFIER endl;
- errorCode = 5;
- }
- catch (const xercesc::DOMException& e)
- {
- XERCES_STD_QUALIFIER cerr << "DOMException code is: " << e.code << XERCES_STD_QUALIFIER endl;
- errorCode = 2;
- }
- catch (...)
- {
- XERCES_STD_QUALIFIER cerr << "An error occurred creating the document" << XERCES_STD_QUALIFIER endl;
- errorCode = 3;
- }
- } // (inpl != NULL)
- else
- {
- XERCES_STD_QUALIFIER cerr << "Requested implementation is not supported" << XERCES_STD_QUALIFIER endl;
- errorCode = 4;
- }
- if( !errorCode )
- {
- m_bXMLInitOk = true;
- return true;
- }
- else
- {
- return false;
- }
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::WCharToChar
-// Converts wchar_t* -> char*.
-// -----------------------------------------------------------------------------
-void CATDataSaver::WCharToChar( string& sInput, const WCHAR* Source )
-{
- LOG_LOW_FUNC_ENTRY("CATDataSaver::WCharToChar");
- if( !Source )
- return;
- int i = 0;
-
- while( Source[i] != '\0' )
- {
- char c = (CHAR)Source[i];
- sInput.append( &c, 1 );
- ++i;
- }
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::CharToWChar
-// Converts char* -> wchar_t*.
-// -----------------------------------------------------------------------------
-LPWSTR CATDataSaver::CharToWChar( const char* str )
-{
- LOG_LOW_FUNC_ENTRY("CATDataSaver::CharToWChar");
- LPWSTR out = NULL;
- if( str != NULL )
- {
- int in_len = (int)strlen( str );
- int out_len = MultiByteToWideChar(CP_ACP, 0, str, in_len, NULL, 0) + 2;
- out = new WCHAR[out_len];
-
- if (out)
- {
- memset(out, 0x00, sizeof(WCHAR)*out_len);
- MultiByteToWideChar(CP_ACP, 0, str, in_len, out, in_len);
- }
- }
- return out;
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::SaveXML
-// Writes data to xml tree.
-// -----------------------------------------------------------------------------
-void CATDataSaver::SaveXML( string sInput, int iElementType )
-{
- LOG_FUNC_ENTRY("CATDataSaver::SaveXML");
- // Variables ok?
- if( sInput.empty() || m_pDomDoc == NULL )
- {
- return;
- }
- try
- {
- switch( iElementType )
- {
- case RESULT:
- {
- // Print number of runs
- string sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- LPWSTR wTemp = CharToWChar( sTemp.c_str() );
- m_pRootElem->setAttribute( L"runs", (const LPWSTR)wTemp );
-
- // Print failed runs
- sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- if( wTemp )
- delete[] wTemp;
- wTemp = CharToWChar( sTemp.c_str() );
- m_pRootElem->setAttribute( L"failed", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
- }
- break;
- case RUN:
- {
- if( m_pRootElem == NULL )
- return;
- xercesc::DOMElement* runElem = m_pDomDoc->createElement( L"run" );
- m_pRootElem->appendChild( runElem );
-
- // Reset handle leaks.
- m_pHandleLeaks = NULL;
-
- // Print start time
- string sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- LPWSTR wTemp = CharToWChar( sTemp.c_str() );
- runElem->setAttribute( L"start_time", (const LPWSTR)wTemp );
- runElem->setAttribute( L"end_time", NULL );
- if( wTemp )
- delete[] wTemp;
-
- // Print build target
- sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- wTemp = CharToWChar( sTemp.c_str() );
- runElem->setAttribute( L"build_target", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
-
- // Print process name
- wTemp = CharToWChar( sInput.c_str() );
- runElem->setAttribute( L"process_name", (const LPWSTR)wTemp );
-
- m_pRunElement = runElem;
-
- char cTemp[128];
- if( wTemp )
- delete[] wTemp;
- wTemp = CharToWChar( itoa( m_iRunNumber, cTemp, 10 ) );
- runElem->setAttribute( L"id", (const LPWSTR)wTemp );
- m_iRunNumber++;
- if( wTemp )
- delete[] wTemp;
- }
- break;
- case LEAK:
- {
- m_pCurrentLeakElem = m_pDomDoc->createElement( L"leak" );
-
-
- if( m_pCurrentLeakElem == NULL || m_pRunElement == NULL )
- return;
-
- // Sub test?
- if( m_pCurrentSubTestElem )
- m_pCurrentSubTestElem->appendChild( m_pCurrentLeakElem );
- else
- m_pRunElement->appendChild( m_pCurrentLeakElem );
-
- // Print leak ID
- string sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- LPWSTR wTemp = CharToWChar( sTemp.c_str() );
- m_pCurrentLeakElem->setAttribute( L"id", (const LPWSTR)wTemp );
-
- // Print leak size
- sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- if( wTemp )
- delete[] wTemp;
- wTemp = CharToWChar( sTemp.c_str() );
- m_pCurrentLeakElem->setAttribute( L"size", (const LPWSTR)wTemp );
-
- // Print leak address
- sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- if( wTemp )
- delete[] wTemp;
- wTemp = CharToWChar( sTemp.c_str() );
- m_pCurrentLeakElem->setAttribute( L"memaddress", (const LPWSTR)wTemp );
-
- // Print leak time
- sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- if( wTemp )
- delete[] wTemp;
- wTemp = CharToWChar( sTemp.c_str() );
- m_pCurrentLeakElem->setAttribute( L"time", (const LPWSTR)wTemp );
-
- // Print leak module
- sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- if( wTemp )
- delete[] wTemp;
- wTemp = CharToWChar( sTemp.c_str() );
- m_pCurrentLeakElem->setAttribute( L"module", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
- }
- break;
- case ITEM:
- {
- xercesc::DOMNode* callstackNode = NULL;
-
- xercesc::DOMElement* callstackElem = NULL;
-
- if( m_pCurrentLeakElem == NULL )
- return;
-
- // Print module name
- if( !m_pCurrentLeakElem->hasChildNodes() )
- {
- callstackElem = m_pDomDoc->createElement( L"callstack" );
- m_pCurrentLeakElem->appendChild( callstackElem );
- callstackNode = callstackElem;
- }
- else
- {
- callstackNode = m_pCurrentLeakElem->getFirstChild();
- }
-
- // Add callstack item
- xercesc::DOMElement* itemElem = m_pDomDoc->createElement( L"item" );
- callstackNode->appendChild( itemElem );
-
- // Print memory address name
- string sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- LPWSTR wTemp = CharToWChar( sTemp.c_str() );
-
- itemElem->setAttribute( L"memaddress", (const LPWSTR)wTemp );
-
- // Print calculated memory address
- sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- if( wTemp )
- delete[] wTemp;
- wTemp = CharToWChar( sTemp.c_str() );
-
- itemElem->setAttribute( L"calc_addr", (const LPWSTR)wTemp );
-
- // Print module name
- sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- if( wTemp )
- delete[] wTemp;
- wTemp = CharToWChar( sTemp.c_str() );
-
- itemElem->setAttribute( L"module", (const LPWSTR)wTemp );
-
- // Print function name
- sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- if( wTemp )
- delete[] wTemp;
- wTemp = CharToWChar( sTemp.c_str() );
-
- itemElem->setAttribute( L"function", (const LPWSTR)wTemp );
-
- sTemp = GetStringUntilNextGivenChar( sInput, ';' );
-
- // Print function line from urel build
- if( !m_bUdebBuild )
- {
- if( wTemp )
- delete[] wTemp;
- wTemp = CharToWChar( sTemp.c_str() );
- itemElem->setAttribute( L"function_line", (const LPWSTR)wTemp );
- sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- }
-
- // Print file name
- if( wTemp )
- delete[] wTemp;
- // Erase if path found from sTemp.
- if ( sTemp.rfind( "/" ) != string::npos )
- {
- sTemp.erase(0, sTemp.rfind( "/" )+1 );
- }
- if ( sTemp.rfind( "\\" ) != string::npos )
- {
- sTemp.erase(0, sTemp.rfind( "\\" )+1 );
- }
- wTemp = CharToWChar( sTemp.c_str() );
-
- itemElem->setAttribute( L"file", (const LPWSTR)wTemp );
-
- // Print line of file
- sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- if( wTemp )
- delete[] wTemp;
- wTemp = CharToWChar( sTemp.c_str() );
-
- if( m_bUdebBuild )
- itemElem->setAttribute( L"line", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
- }
- break;
- case RUN_END:
- {
- if( m_pRunElement == NULL )
- return;
- const LPWSTR wTemp = CharToWChar( sInput.c_str() );
- m_pRunElement->setAttribute( L"end_time", wTemp );
- if( wTemp )
- delete[] wTemp;
- }
- break;
- case ERROR_IN_RUN:
- {
- if( m_pRunElement == NULL )
- return;
- // Add error item
- xercesc::DOMElement* errorElem = m_pDomDoc->createElement( L"error" );
- m_pRunElement->appendChild( errorElem );
-
- // Print error code
- string sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- LPWSTR wTemp = CharToWChar( sTemp.c_str() );
- errorElem->setAttribute( L"code", (const LPWSTR)wTemp );
-
- // Print error time
- sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- if( wTemp )
- delete[] wTemp;
- wTemp = CharToWChar( sTemp.c_str() );
- errorElem->setAttribute( L"time", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
- }
- break;
- case MEM_LEAKS:
- {
- if( m_pRunElement == NULL )
- return;
- xercesc::DOMElement* memoryLeaksElement = m_pDomDoc->createElement( L"mem_leaks" );
- m_pRunElement->appendChild( memoryLeaksElement );
- m_pMemoryLeaks = memoryLeaksElement;
-
- // Print number of leaks
- LPWSTR wTemp = CharToWChar( sInput.c_str() );
- memoryLeaksElement->setAttribute( L"count", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
- }
- break;
- case MEM_LEAK_MODULE:
- {
- if( m_pMemoryLeaks == NULL )
- return;
- xercesc::DOMElement* moduleElement = m_pDomDoc->createElement( L"module" );
- m_pMemoryLeaks->appendChild( moduleElement );
-
- // Print module name
- string sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- LPWSTR wTemp = CharToWChar( sTemp.c_str() );
- moduleElement->setAttribute( L"name", (const LPWSTR)wTemp );
-
- if( wTemp )
- delete[] wTemp;
- // Print number of memory leaks
- wTemp = CharToWChar( sInput.c_str() );
- moduleElement->setAttribute( L"leaks", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
- }
- break;
- case HANDLE_LEAKS:
- {
- if( m_pRunElement == NULL )
- return;
- if( m_pHandleLeaks )
- {
- // Update number of leaks
- LPWSTR wTemp = CharToWChar( sInput.c_str() );
- m_pHandleLeaks->setAttribute( L"count", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
- }
- else
- {
- xercesc::DOMElement* handleLeaksElement = m_pDomDoc->createElement( L"handle_leaks" );
- m_pRunElement->appendChild( handleLeaksElement );
- m_pHandleLeaks = handleLeaksElement;
-
- // Print number of leaks
- LPWSTR wTemp = CharToWChar( sInput.c_str() );
- handleLeaksElement->setAttribute( L"count", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
- }
- }
- break;
- case HANDLE_LEAK_MODULE:
- {
- if( m_pHandleLeaks == NULL )
- return;
- xercesc::DOMElement* moduleElement = m_pDomDoc->createElement( L"module" );
- m_pHandleLeaks->appendChild( moduleElement );
-
- // Print module name
- string sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- LPWSTR wTemp = CharToWChar( sTemp.c_str() );
- moduleElement->setAttribute( L"name", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
-
- // Print number of memory leaks
- wTemp = CharToWChar( sInput.c_str() );
- moduleElement->setAttribute( L"leaks", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
- }
- break;
- case TEST_START:
- {
- m_pCurrentSubTestElem = m_pDomDoc->createElement( L"subtest" );
-
- if( m_pCurrentSubTestElem == NULL || m_pRunElement == NULL )
- return;
-
- m_pRunElement->appendChild( m_pCurrentSubTestElem );
-
- // Print sub test name
- string sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- LPWSTR wTemp = CharToWChar( sTemp.c_str() );
- m_pCurrentSubTestElem->setAttribute( L"name", (const LPWSTR)wTemp );
- if( wTemp )
- {
- delete[] wTemp;
- wTemp = NULL;
- }
-
- // Print sub test time
- sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- wTemp = CharToWChar( sTemp.c_str() );
- m_pCurrentSubTestElem->setAttribute( L"start_time", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
- break;
- }
- case TEST_END:
- {
- if( m_pCurrentSubTestElem == NULL )
- return;
- // Print end time
- string sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- LPWSTR wTemp = CharToWChar( sTemp.c_str() );
- m_pCurrentSubTestElem->setAttribute( L"end_time", (const LPWSTR)wTemp );
- m_pCurrentSubTestElem = NULL;
- if( wTemp )
- delete[] wTemp;
- break;
- }
- case SUBTEST_MEM_LEAKS:
- {
- if( m_pCurrentSubTestElem == NULL )
- return;
- xercesc::DOMElement* memoryLeaksElement = m_pDomDoc->createElement( L"mem_leaks" );
- m_pCurrentSubTestElem->appendChild( memoryLeaksElement );
- m_pSubtestMemoryLeaks = memoryLeaksElement;
-
- // Print number of leaks
- LPWSTR wTemp = CharToWChar( sInput.c_str() );
- memoryLeaksElement->setAttribute( L"count", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
- break;
- }
- case SUBTEST_MEM_LEAK_MODULE:
- {
- if( m_pSubtestMemoryLeaks == NULL )
- return;
- xercesc::DOMElement* moduleElement = m_pDomDoc->createElement( L"module" );
- m_pSubtestMemoryLeaks->appendChild( moduleElement );
-
- // Print module name
- string sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- LPWSTR wTemp = CharToWChar( sTemp.c_str() );
- moduleElement->setAttribute( L"name", (const LPWSTR)wTemp );
-
- if( wTemp )
- delete[] wTemp;
- // Print number of memory leaks
- wTemp = CharToWChar( sInput.c_str() );
- moduleElement->setAttribute( L"leaks", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
- break;
- }
- case SUBTEST_HANDLE_LEAKS:
- {
- if( m_pCurrentSubTestElem == NULL )
- return;
- xercesc::DOMElement* handleLeaksElement = m_pDomDoc->createElement( L"handle_leaks" );
- m_pCurrentSubTestElem->appendChild( handleLeaksElement );
-
- //Print number of handle leaks
- string sTemp = GetStringUntilNextGivenChar( sInput, ';' );
- LPWSTR wTemp = CharToWChar( sTemp.c_str() );
- handleLeaksElement->setAttribute( L"count", (const LPWSTR)wTemp );
- if( wTemp )
- delete[] wTemp;
- break;
- }
- default:
- break;
- }
- }
- catch( ... )
- {
- printf( "Error when writing data to XML file." );
- }
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::GetStringUntilNextGivenChar
-// Function returns string from begin of given string until next given char,
-// characters until given char are removed from sInput string.
-// -----------------------------------------------------------------------------
-string CATDataSaver::GetStringUntilNextGivenChar( string& sInput, char cCharacter )
-{
- LOG_LOW_FUNC_ENTRY("CATDataSaver::GetStringUntilNextGivenChar");
- string sRet;
- size_t iPos = sInput.find( cCharacter );
- if( sInput.size() > 1 && iPos != string::npos )
- {
- sRet = sInput.substr( 0, iPos );
- sInput.erase( 0, (iPos + 1) );
- }
- return sRet;
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::SetBuild
-// Function sets build target info.
-// -----------------------------------------------------------------------------
-void CATDataSaver::SetBuild( bool bUdebBuild )
-{
- LOG_FUNC_ENTRY("CATDataSaver::SetBuild");
- m_bUdebBuild = bUdebBuild;
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::AddCarbideData
-// Function adds string to Carbide data.
-// -----------------------------------------------------------------------------
-void CATDataSaver::AddCarbideData( const string& sInput )
-{
- LOG_LOW_FUNC_ENTRY("CATDataSaver::AddCarbideData");
- m_sCarbideDataLine.append( sInput );
- m_sCarbideDataLine.append(";");
-}
-
-// -----------------------------------------------------------------------------
-// CATDataSaver::IntegerToString
-// Converts integer to string.
-// -----------------------------------------------------------------------------
-string CATDataSaver::IntegerToString( int iValueToConvert )
-{
- LOG_LOW_FUNC_ENTRY("CATDataSaver::IntegerToString");
- char cTemp[128];
- string sValue( itoa( iValueToConvert, cTemp, 10 ) );
- return sValue;
-}