--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/idlehomescreen/xmluicontroller/src/activetransactionstack.cpp Thu Dec 17 08:40:49 2009 +0200
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2005-2007 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: Active transaction stack
+*
+*/
+
+
+#include "activetransactionstack.h"
+#include "transaction.h"
+#include "xmluicontrollerpanic.h"
+
+
+
+using namespace AiXmlUiController;
+
+// ========================== MEMBER FUNCTIONS ===============================
+
+CActiveTransactionStack::CActiveTransactionStack()
+ : iTransactions( CTransaction::LinkOffset() )
+ {
+ }
+
+CActiveTransactionStack* CActiveTransactionStack::NewL()
+ {
+ CActiveTransactionStack* self = new( ELeave ) CActiveTransactionStack;
+
+ return self;
+ }
+
+CActiveTransactionStack::~CActiveTransactionStack()
+ {
+ __ASSERT_DEBUG( IsEmpty(), Panic( ETransactionStackNotEmpty ) );
+ }
+
+TBool CActiveTransactionStack::IsEmpty() const
+ {
+ return iTransactions.IsEmpty();
+ }
+
+void CActiveTransactionStack::Push( MTransaction* aTransaction )
+ {
+ CTransaction* tr = dynamic_cast< CTransaction* >( aTransaction );
+
+ if ( tr )
+ {
+ iTransactions.AddFirst( *tr );
+ }
+ }
+
+MTransaction* CActiveTransactionStack::Pop()
+ {
+ CTransaction* tr = DoTop();
+ if ( tr )
+ {
+ tr->Deque();
+ }
+
+ return tr;
+ }
+
+MTransaction* CActiveTransactionStack::Top() const
+ {
+ return DoTop();
+ }
+
+MTransaction* CActiveTransactionStack::Lookup( TInt aTxId ) const
+ {
+ return DoLookup( aTxId );
+ }
+
+MTransaction* CActiveTransactionStack::Remove( TInt aTxId )
+ {
+ CTransaction* tr = DoLookup( aTxId );
+
+ if ( tr )
+ {
+ tr->Deque();
+ }
+
+ return tr;
+ }
+
+CTransaction* CActiveTransactionStack::DoTop() const
+ {
+ __ASSERT_ALWAYS( !iTransactions.IsEmpty(), Panic( ETransactionStackEmpty ) );
+
+ CTransaction* tr = iTransactions.First();
+ return tr;
+ }
+
+CTransaction* CActiveTransactionStack::DoLookup( TInt aTxId ) const
+ {
+ // Iterate over transactions and search transaction with aTxId
+ TDblQueIter< CTransaction >
+ iter( const_cast< TDblQue< CTransaction >& >( iTransactions ) );
+ iter.SetToFirst();
+
+ while ( iter )
+ {
+ CTransaction* tr = iter++;
+
+ if ( tr->Id() == aTxId )
+ {
+ // Match. Return transaction
+ return tr;
+ }
+ }
+
+ return NULL;
+ }
+
+// End of File