resourcemgmt/hwresourcesmgr/server/src/HWRMPluginTransactionList.cpp
changeset 0 4e1aa6a622a0
--- /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