diff -r 000000000000 -r 4e1aa6a622a0 sensorservices/sensorserver/inc/server/sensrvtransactionqueue.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sensorservices/sensorserver/inc/server/sensrvtransactionqueue.h Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,233 @@ +/* +* Copyright (c) 2006 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: Transaction queue implementation +* +*/ + + +#ifndef SENSRVTRANSACTIONQUEUE_H +#define SENSRVTRANSACTIONQUEUE_H + +#include + +class CSensrvTransaction; +class CSensrvSession; + +/** + * Simple to use transaction queue. + * + * @since S60 5.0 + */ +class CSensrvTransactionQueue : public CBase + { + public: + + /** + * Removal type specifies what should be done to removed transaction. + */ + enum TRemovalType + { + ERemovalTypeUndefined, ///< Only valid removal type for non-owning queues + ERemovalTypeComplete, ///< Completes and deletes transaction + ERemovalTypeCancel, ///< Completes with KErrCancel and deletes transaction + ERemovalTypeTransfer ///< Transaction is just removed, not deleted or completed + }; + + /** + * Linkable transaction pointer. + */ + class TLinkableTransactionPtr + { + public: + TLinkableTransactionPtr() + { + } + + /** + * Link item for queueing transaction pointers + */ + TSglQueLink iLink; + + /** + * Transaction pointer + * Not owned. + */ + CSensrvTransaction* iTransaction; + }; + + + /** + * Two phase constructor. + * + * @since S60 5.0 + * @param aOwned Indicates if queue owns transactions or is + * it used simply to store the pointers. + * If transactions are owned, deleting queue will + * also delete all transactions. + * @return New CSensrvTransactionQueue instance + * @exception KErrNoMemory Out of memory. + */ + static CSensrvTransactionQueue* NewL(TBool aOwned); + + /** + * Destructor. + */ + virtual ~CSensrvTransactionQueue(); + + /** + * Adds transaction to the the queue + * + * @since S60 5.0 + * @param aTransaction The transaction to be added. + * @param aLast If ETrue, transaction is added to the end of + * the queue, otherwise it is added to the beginning. + * @return KErrNoMemory: Out of memory. + * KErrArgument: NULL transaction. + */ + TInt Add(CSensrvTransaction* aTransaction, TBool aLast = ETrue); + + /** + * Removes specified transaction from queue, if it is there. + * If queue owns the transactions, the removed transaction + * may be completed and deleted, depending on removal type. + * + * @since S60 5.0 + * @param aTransaction The transaction to be removed. + * @param aRemovalType Determines removal type. + * @see TRemovalType + */ + void Remove(CSensrvTransaction* aTransaction, + TRemovalType aRemovalType = ERemovalTypeUndefined); + + /** + * Removes all transactions initiated by specified session + * from queue. + * If queue owns the transactions, the transactions + * are completed with KErrCancel and are deleted. Otherwise + * does not delete or complete transactions. + * + * @since S60 5.0 + * @param aSession The session to match. + */ + void Remove(CSensrvSession* aSession); + + /** + * Removes all transactions with timestamp older than + * specified cutoff time. + * + * @since S60 5.0 + * @param aCutoffTime Transactions older that this time + * will be removed. + * @return Number of transactions removed. + */ + TInt RemoveObsolete(const TTime& aCutoffTime); + + /** + * Removes all transactions. + * + * @since S60 5.0 + */ + void RemoveAll(); + + /** + * Gets pointer to first transaction in queue. + * Transaction stays in the queue. + * + * @since S60 5.0 + * @return Pointer to first transaction in queue or NULL if empty. + */ + CSensrvTransaction* First(); + + /** + * Checks if queue is empty + * + * @since S60 5.0 + * @return ETrue if queue is empty. + */ + inline TBool IsEmpty() {return iTransactionPtrList.IsEmpty(); }; + + + private: + + /** + * C++ constructor + * + * @since S60 5.0 + * @param aOwner Indicates if queue owns transactions or is + * it used simply to store the pointers. + * Deleting queue will delete all transactions if transactions + * are owned. + */ + CSensrvTransactionQueue(TBool aOwned); + + /** + * 2nd phase of construction + * + * @since S60 5.0 + */ + void ConstructL(); + + /** + * Gets pointer to the TLinkableTransactionPtr in queue + * corresponding to specified transaction. + * Transaction stays in the queue. + * + * @since S60 5.0 + * @param aTransaction The transaction to be found. + * @return Pointer to TLinkableTransactionPtr or NULL if not found. + */ + TLinkableTransactionPtr* FindTransactionPtr(CSensrvTransaction* aTransaction); + + /** + * Removes linkable transaction pointer and deletes it. + * If transactions are owned, they are completed with KErrCancel + * or whatever error code they currently have. + * + * @since S60 5.0 + * @param aPtr Linkable transaction pointer to remove + * @param aRemovalType Determines removal type. + * @see TRemovalType + */ + void RemovePtr(TLinkableTransactionPtr* aPtr, TRemovalType aRemovalType); + + + private: + + /** + * Holds transaction pointers of transactions. + * Queued pointer objects are owned. + */ + TSglQue iTransactionPtrList; + + /** + * Iterator for transaction queue + */ + TSglQueIter iTransactionPtrIter; + + /** + * Indicates whether or not this queue owns the transactions it holds. + */ + TBool iOwned; + + /** + * Heap where the queue resides. + * Transactions must reside in the same heap. + * Not own. + */ + RHeap* iHeap; + }; + + + +#endif // SENSRVTRANSACTIONQUEUE_H