diff -r 000000000000 -r 4e1aa6a622a0 resourcemgmt/hwresourcesmgr/server/src/HWRMPluginTransactionList.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/resourcemgmt/hwresourcesmgr/server/src/HWRMPluginTransactionList.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,248 @@ +// Copyright (c) 2006-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: +// + + + + +// INCLUDE FILES +#include "HWRMtrace.h" +#include "HWRMPluginTransactionList.h" + +// EXTERNAL DATA STRUCTURES +// None + +// EXTERNAL FUNCTION PROTOTYPES +// None + +// CONSTANTS +// None + +// MACROS +// None + +// LOCAL CONSTANTS AND MACROS +// None + +// MODULE DATA STRUCTURES +// None + +// LOCAL FUNCTION PROTOTYPES +// None + +// FORWARD DECLARATIONS +// None + +// ============================= LOCAL FUNCTIONS =============================== + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CHWRMPluginTransactionList::CHWRMPluginTransactionList +// C++ constructor +// ----------------------------------------------------------------------------- +// +CHWRMPluginTransactionList::CHWRMPluginTransactionList() + : iTransactionData(NULL), + iTransactionDataLast(NULL) + { + COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPluginTransactionList::CHWRMPluginTransactionList()" )); + COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPluginTransactionList::CHWRMPluginTransactionList - return " )); + } + +// ----------------------------------------------------------------------------- +// CHWRMPluginTransactionList::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CHWRMPluginTransactionList* CHWRMPluginTransactionList::NewL() + { + COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPluginTransactionList::NewL()" )); + + CHWRMPluginTransactionList* self = new( ELeave ) CHWRMPluginTransactionList(); + + // No ConstructL as nothing to do there. + + COMPONENT_TRACE2(_L( "HWRM Server - CHWRMPluginTransactionList::NewL - return 0x%x" ), self ); + + return self; + } + +// --------------------------------------------------------- +// Destructor +// --------------------------------------------------------- +// +CHWRMPluginTransactionList::~CHWRMPluginTransactionList() + { + COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPluginTransactionList::~CHWRMPluginTransactionList()" ) ); + + // delete any existing transaction data + while ( iTransactionData ) + { + COMPONENT_TRACE2(_L( "HWRM Server - CHWRMPluginTransactionList::~CHWRMPluginTransactionList - Deleting transaction %d" ), iTransactionData->iTransId ); + THWRMPluginTransactionListItem* data = iTransactionData; + iTransactionData = iTransactionData->iNextData; + delete data; + } + + // No need to delete iTransactionDataLast, obviously. Just NULL it to + iTransactionDataLast = NULL; + + COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPluginTransactionList::~CHWRMPluginTransactionList - return " )); + } + + +// ----------------------------------------------------------------------------- +// CHWRMPluginTransactionList::FindTransaction +// Find transaction from list. +// Uses linear search, but there should rarely be more than one concurrent +// transaction so it won't be a problem. +// ----------------------------------------------------------------------------- +// +THWRMPluginTransactionListItem* CHWRMPluginTransactionList::FindTransaction( TUint8 aTransId, TBool aRemove ) + { + COMPONENT_TRACE3(_L( "HWRM Server - CHWRMPluginTransactionList::FindTransaction(0x%x, 0x%x)" ), aTransId, aRemove ); + +#ifdef COMPONENT_TRACE_FLAG + // check the transaction list contents + THWRMPluginTransactionListItem* checkData = iTransactionData; + TInt count(0); + if ( checkData ) + { + while ( checkData ) + { + COMPONENT_TRACE3(_L( "HWRM Server - CHWRMPluginTransactionList::FindTransaction - Data %d in list: 0x%x" ), count, checkData->iTransId ); + count++; + checkData = checkData->iNextData; + } + } + else + { + COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPluginTransactionList::FindTransaction - List is empty" ) ); + } +#endif + + THWRMPluginTransactionListItem* data = iTransactionData; + // comment to ignore Coverity false positive. See more detailed comment below. + // coverity[assign_zero] + THWRMPluginTransactionListItem* dataPrevious = NULL; + + TBool found(EFalse); + + while ( data && !found ) + { + if ( data->iTransId == aTransId ) + { + found = ETrue; + + // update pointers, if remove + if ( aRemove ) + { + if ( iTransactionData == data ) + { + iTransactionData = data->iNextData; + } + else + { + // dataPrevious is always not NULL here. + // If the while loop IS on its first iteration iTransactionData == data + // is true since data = iTransactionData is how data is initiated. If this is + // NOT the first iteration dataPrevious = data in the else claues below will + // have made sure dataPrevious != NULL. Comments to instruct Coverity to ignore + // this false positive are justified. + // + //coverity[var_deref_op] + dataPrevious->iNextData = data->iNextData; + } + + if ( iTransactionDataLast == data ) + { + iTransactionDataLast = dataPrevious; + } + + iCount--; + } + } + else + { + dataPrevious = data; + data = data->iNextData; + } + } +#ifdef COMPONENT_TRACE_FLAG + if ( data ) + { + COMPONENT_TRACE2(_L( "HWRM Server - CHWRMPluginTransactionList::FindTransaction - return transaction 0x%x" ), data->iTransId ); + } + else + { + COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPluginTransactionList::FindTransaction - return NULL" ) ); + } +#endif + + return data; + } + +// ----------------------------------------------------------------------------- +// CHWRMPluginTransactionList::AddTransaction +// Adds transaction to list +// ----------------------------------------------------------------------------- +// +void CHWRMPluginTransactionList::AddTransaction( THWRMPluginTransactionListItem* aTransactionData ) + { + COMPONENT_TRACE2(_L( "HWRM Server - CHWRMPluginTransactionList::AddTransaction(0x%x)" ), aTransactionData ); + + // if previous data exists, put it last in the list. + if ( iTransactionData ) + { + iTransactionDataLast->iNextData = aTransactionData; + COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPluginTransactionList::AddTransaction - Added transaction to list" ) ); + } + else + { + iTransactionData = aTransactionData; + } + + iTransactionDataLast = aTransactionData; + iTransactionDataLast->iNextData = NULL; + + iCount++; + + COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPluginTransactionList::AddTransaction - return" ) ); + + } + +// ----------------------------------------------------------------------------- +// CHWRMPluginTransactionList::RemoveFirstItem +// Removes first item from transaction list and adjust pointers accordingly +// ----------------------------------------------------------------------------- +// +THWRMPluginTransactionListItem* CHWRMPluginTransactionList::RemoveFirstItem() + { + COMPONENT_TRACE1(_L( "HWRM Server - CHWRMPluginTransactionList::RemoveFirstItem()" ) ); + + THWRMPluginTransactionListItem* retval = iTransactionData; + + iTransactionData = iTransactionData->iNextData; + + iCount--; + + COMPONENT_TRACE2(_L( "HWRM Server - CHWRMPluginTransactionList::RemoveFirstItem - return 0x%x" ), retval ); + + return retval; + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File