--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sensorservices/sensorserver/src/server/sensrvchannelchangequeue.cpp Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,180 @@
+/*
+* Copyright (c) 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: Channel change notifications queue implementation
+*
+*/
+
+
+
+#include "sensrvdefines.h"
+#include "sensrvtrace.h"
+#include "sensrvchannelchangequeue.h"
+
+// ---------------------------------------------------------------------------
+// 2-phase constructor
+// ---------------------------------------------------------------------------
+//
+CSensrvChannelChangeQueue* CSensrvChannelChangeQueue::NewL()
+ {
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::NewL()" ) ) );
+
+ CSensrvChannelChangeQueue* self = new( ELeave ) CSensrvChannelChangeQueue();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::NewL - return 0x%x" ), self ) );
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CSensrvChannelChangeQueue::CSensrvChannelChangeQueue()
+ : iChangesList(_FOFF(TChannelChangeNotification,iLink)),
+ iChangesListIter(iChangesList)
+ {
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::CSensrvChannelChangeQueue()" ) ) );
+
+ // Nothing to do
+
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::CSensrvChannelChangeQueue - return" ) ) );
+ }
+
+// ---------------------------------------------------------------------------
+// 2nd phase of construction
+// ---------------------------------------------------------------------------
+//
+void CSensrvChannelChangeQueue::ConstructL()
+ {
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::ConstructL()" ) ) );
+
+ // Nothing to do
+
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::ConstructL - return" ) ) );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CSensrvChannelChangeQueue::~CSensrvChannelChangeQueue()
+ {
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::~CSensrvChannelChangeQueue()" ) ) );
+
+ RemoveAll();
+
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::~CSensrvChannelChangeQueue - return" ) ) );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Adds property to the end of the queue
+// ---------------------------------------------------------------------------
+//
+TInt CSensrvChannelChangeQueue::Append( const TSensrvChannelInfo& aChannelInfo,
+ TSensrvChannelChangeType aChangeType )
+ {
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::Append(Channel ID:%d)" ), aChannelInfo.iChannelId ) );
+
+ TInt err(KErrNone);
+
+ // Allocate linkable transaction pointer in same heap as queue
+ TChannelChangeNotification* newPtr = new TChannelChangeNotification();
+
+ if (newPtr)
+ {
+ newPtr->iChannelInfo = aChannelInfo;
+ newPtr->iChangeType = aChangeType;
+ iChangesList.AddLast(*newPtr);
+ }
+ else
+ {
+ ERROR_TRACE( ( _L( "Sensor Server - CCSensrvChannelChangeQueue::Append - ERROR: No memory to add item" ) ) );
+ err = KErrNoMemory;
+ }
+
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::Append - return %d" ), err ) );
+
+ return err;
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the first property
+// ---------------------------------------------------------------------------
+//
+CSensrvChannelChangeQueue::TChannelChangeNotification* CSensrvChannelChangeQueue::First()
+ {
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::First()" ) ) );
+
+ TChannelChangeNotification* ptr = NULL;
+
+ if (!iChangesList.IsEmpty())
+ {
+ ptr = iChangesList.First();
+ }
+
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::First - return %d" ), ptr ) );
+
+ return ptr;
+ }
+
+// ---------------------------------------------------------------------------
+// Remove the first property
+// ---------------------------------------------------------------------------
+//
+void CSensrvChannelChangeQueue::RemoveFirst()
+ {
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::RemoveFirst()" ) ) );
+
+ TChannelChangeNotification* ptr = NULL;
+
+ if (!iChangesList.IsEmpty())
+ {
+ ptr = iChangesList.First();
+ iChangesList.Remove(*ptr);
+ delete ptr;
+ }
+
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::RemoveFirst - return" ) ) );
+ }
+
+// ---------------------------------------------------------------------------
+// Remove all properties from queue
+// ---------------------------------------------------------------------------
+//
+void CSensrvChannelChangeQueue::RemoveAll()
+ {
+ COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvChannelChangeQueue::RemoveAll()" ) ) );
+
+ if (!iChangesList.IsEmpty())
+ {
+ TChannelChangeNotification* ptr = NULL;
+ iChangesListIter.SetToFirst();
+
+ while ((ptr = iChangesListIter++) != NULL)
+ {
+ iChangesList.Remove(*ptr);
+ delete ptr;
+ };
+ }
+
+ iChangesList.Reset();
+ }
+
+
+