hti/HtiFramework/src/HtiMessageQueue.cpp
branchRCL_3
changeset 59 8ad140f3dd41
parent 0 a03f92240627
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hti/HtiFramework/src/HtiMessageQueue.cpp	Wed Oct 13 16:17:58 2010 +0300
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 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:  CHtiMessageQueue implementation
+*
+*/
+
+
+#include "HtiMessageQueue.h"
+
+CHtiMessageQueue* CHtiMessageQueue::NewL()
+    {
+    return new (ELeave) CHtiMessageQueue;
+    }
+
+CHtiMessageQueue::CHtiMessageQueue():
+    iQueue( CHtiMessage::iLinkOffset ),
+    iMemoryAllocated( 0 ),
+    iQueueIter( iQueue ),
+    iIsFirst ( ETrue )
+    {
+    }
+
+CHtiMessageQueue::~CHtiMessageQueue()
+    {
+    RemoveAll();
+    }
+
+void CHtiMessageQueue::RemoveAll()
+    {
+    if ( !IsEmpty() )
+        {
+        CHtiMessage* msg;
+
+        iQueueIter.SetToFirst();
+        while ( ( msg = iQueueIter++ ) != NULL )
+            {
+            iQueue.Remove( *msg );
+            delete msg;
+            }
+        }
+        iMemoryAllocated = 0;
+    }
+
+CHtiMessage* CHtiMessageQueue::Remove()
+    {
+    CHtiMessage* msg = NULL;
+    if ( !IsEmpty() )
+        {
+        msg = iQueue.First();
+        iQueue.Remove( *msg );
+        iMemoryAllocated -= msg->Size();
+        }
+    return msg;
+    }
+
+CHtiMessage* CHtiMessageQueue::Remove( CHtiMessage* aMsg)
+    {
+    if ( aMsg && !IsEmpty() )
+        {
+        iQueue.Remove( *aMsg );
+        iMemoryAllocated -= aMsg->Size();
+        return aMsg;
+        }
+    return NULL;
+    }
+
+void CHtiMessageQueue::StartServiceIteration()
+    {
+    if ( !IsEmpty() )
+        {
+        iQueueIter.SetToFirst();
+        iIsFirst = ETrue;
+        }
+    }
+
+CHtiMessage* CHtiMessageQueue::GetNext()
+    {
+    CHtiMessage* msg = NULL;
+    if ( !IsEmpty() )
+        {
+        while ( ( msg = iQueueIter++ ) != NULL )
+            {
+            if ( iIsFirst )
+                {
+                iIsFirst = EFalse;
+                iLastServiceUid = msg->DestinationServiceUid();
+                return msg;
+                }
+            else if ( msg->DestinationServiceUid() != iLastServiceUid )
+                {
+                iLastServiceUid = msg->DestinationServiceUid();
+                return msg;
+                }
+            }
+        }
+    return msg;
+    }
+
+
+void CHtiMessageQueue::Add( CHtiMessage& aMessage )
+    {
+    iQueue.AddLast( aMessage );
+    iMemoryAllocated += aMessage.Size();
+    }
+
+TBool CHtiMessageQueue::IsEmpty() const
+    {
+    return iQueue.IsEmpty();
+    }
+
+TInt CHtiMessageQueue::QueueSize() const
+    {
+    return iMemoryAllocated;
+    }