sensorservices/sensorserver/src/server/sensrvchannelchangequeue.cpp
changeset 0 4e1aa6a622a0
--- /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();
+    }
+
+    
+