--- /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 <e32base.h>
+
+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<TLinkableTransactionPtr> iTransactionPtrList;
+
+ /**
+ * Iterator for transaction queue
+ */
+ TSglQueIter<TLinkableTransactionPtr> 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