diff -r 000000000000 -r f72a12da539e idlehomescreen/xmluicontroller/src/activetransactionstack.cpp --- /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