hti/HtiFramework/inc/HtiMessageQueue.h
branchRCL_3
changeset 59 8ad140f3dd41
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hti/HtiFramework/inc/HtiMessageQueue.h	Wed Oct 13 16:17:58 2010 +0300
@@ -0,0 +1,127 @@
+/*
+* 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:  Simple FIFO Queue class based on single-linked list
+*        (TSglQue<CHtiMessage>). It alsoe provides functionality
+*        to monitor memory allocated by all messages.
+*
+*/
+
+
+#ifndef MESSAGEQUEUE_H__
+#define MESSAGEQUEUE_H__
+
+#include "HtiMessage.h"
+
+NONSHARABLE_CLASS(CHtiMessageQueue)  : public CBase
+    {
+public:
+    /**
+    * Create a new queue
+    *
+    */
+    static CHtiMessageQueue* NewL();
+
+    virtual ~CHtiMessageQueue();
+
+    /**
+    * Adds a new message to the queue
+    *
+    * @param aMessage instance of ready HTI message
+    */
+    void Add(CHtiMessage& aMessage);
+
+    /**
+    * Retrives a message from the queue
+    * and remove it from the queue
+    *
+    * @return a HTI message
+    */
+    CHtiMessage* Remove();
+
+    /**
+    * Removes specifeda message from the queue
+    *
+    * @param aMsg message to remove
+    * @return a HTI message
+    */
+    CHtiMessage* Remove( CHtiMessage* aMsg);
+
+    /**
+    * Deletes all messages from queue
+    */
+    void RemoveAll();
+
+    /**
+    * Starts iteration based on service names
+    * Each call to GetNext() will return next message to the service
+    * different from the service name in the current message
+    */
+    void StartServiceIteration();
+
+    /**
+    * Returns next message with service name different
+    * than in the current message.
+    * This method does not remove message from the queue, so ownership
+    * is not transfered. Remove( CHtiMessage* aMsg) should be used
+    * to delete the message from a queue.
+    *
+    * @return a HTI message or NULL if there is no messages anymore
+    */
+    CHtiMessage* GetNext();
+
+
+    /**
+    * Checks that the queue is empty
+    *
+    * @return ETrue if queue is empty
+    */
+    TBool IsEmpty() const;
+
+    /**
+    * Returns memory allocated by all messages in the queue
+    */
+    TInt QueueSize() const;
+
+protected:
+    CHtiMessageQueue();
+
+protected:
+    /**
+    * Queue
+    */
+    TSglQue<CHtiMessage> iQueue;
+
+    /**
+    * Current memory allocated by hti messages in the queue
+    */
+    TInt iMemoryAllocated;
+
+    /**
+    * queue iterator
+    */
+    TSglQueIter<CHtiMessage> iQueueIter;
+
+    /**
+    * last service uid
+    * used during iteration by service names
+    */
+    TUid iLastServiceUid;
+
+    /**
+    * Used to ommit service name checking for the first GetNext()
+    */
+    TBool iIsFirst;
+    };
+
+#endif