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