idlehomescreen/xmluicontroller/src/activetransactionstack.cpp
changeset 0 f72a12da539e
--- /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