datasourceadaptation/gpsdatasourceadaptation/common/src/cpositionerq.cpp
changeset 36 b47902b73a93
parent 0 9cfd9a3ee49c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datasourceadaptation/gpsdatasourceadaptation/common/src/cpositionerq.cpp	Fri Jun 04 10:34:15 2010 +0100
@@ -0,0 +1,181 @@
+// Copyright (c) 2008-2009 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:
+//
+
+/**
+ @file
+ @InternalComponent
+*/
+
+#include "psylogging.h"
+#include "cpositionerq.h"
+#include "psypanic.h"
+#include "tpositionercall.h"
+
+/*
+* CPositionerQ::NewL
+* Two-phased constructor.
+* @param aEnv pointer to the CPositionerEnvironment
+*/
+CPositionerQ* CPositionerQ::NewL()
+    {
+    CPositionerQ* self = new( ELeave ) CPositionerQ();
+    
+    return self;
+    }
+
+/*
+* CPositionerQ::CPositionerQ
+* C++ default constructor can NOT contain any code, that
+* might leave.
+*/
+CPositionerQ::CPositionerQ()
+    {
+    }
+
+/*
+* CPositionerQ::~CPositionerQ
+* Destructor.
+*/
+CPositionerQ::~CPositionerQ()
+    {
+    __ASSERT_DEBUG(iPsyArray.Count() == 0, User::Panic(KAdaptationPanicCategory, EPanicQNotEmpty));
+    
+    iPsyArray.Close();
+    }
+
+/**
+* Registers the PSY instance to the request handler
+* @param aPSY pointer to the MPositioner
+*/
+void CPositionerQ::RegisterPSYL(MPositioner* aPSY)
+    {
+    TRACESTRING("CPositionerQ::RegisterPSYL start...")
+    
+    //Register the psy
+    User::LeaveIfError(iPsyArray.Append(aPSY));
+    
+    TRACESTRING("CPositionerQ::RegisterPSYL end")
+    }
+
+/**
+* Unregisters the MPositioner instance
+* @param aPSY pointer to the MPositioner
+*/
+void CPositionerQ::UnregisterPSY(MPositioner* aPSY)
+    {
+    TRACESTRING("CPositionerQ::UnregisterPSY start...")
+
+    TInt index = KErrNotFound;
+    index = Index(*aPSY);
+    
+    if(index!=KErrNotFound)
+        {
+        iPsyArray.Remove(index);
+        }
+        
+    TRACESTRING("CPositionerQ::UnregisterPSY end")
+    }
+
+/**
+* Calles aCall::Call for all MPositioners in the queue
+* @param TPositionerCall* pointer to the TPositionerCall derived class
+*/
+void CPositionerQ::PositionerIterator(TPositionerCall& aCall)
+	{
+	for(TInt i=0; i < iPsyArray.Count(); ++i)
+		{
+		aCall.Call(Positioner(i));
+		}
+	}
+
+/**
+* CPositionerQ::IterETrue
+* Calls aCall::Call for all MPositioners in the queue
+* @param aCall reference to the TPositionerCall derived function to be called
+* @return TBool	returns True if the call returns true for any positioner in the queue
+*/
+TBool CPositionerQ::IterETrue(TRetBoolPositionerCall& aCall)
+	{
+    TInt count = iPsyArray.Count();
+    for(TInt i=0; i<count; i++)
+        {
+        if(aCall.Call(Positioner(i)))
+            {
+            return ETrue;
+            }
+        }
+    return EFalse;
+	}
+
+/**
+* CPositionerQ::IterGreatest
+* 
+* Calls aCall::Call for all MPositioners in the queue
+* @param aCall reference to the TPositionerCall derived function to be called
+* @return TBool	returns the greatest of all the integer values returned from each MPositioner method
+*/
+TUint CPositionerQ::IterGreatest(TRetTUintPositionerCall& aCall)
+	{
+    TInt count = iPsyArray.Count();
+    TUint greatest = 0;
+    TUint result = 0;
+    
+    for(TInt i=0; i<count; i++)
+        {
+        result = aCall.Call(Positioner(i));
+        if(result > greatest)
+            {
+            greatest = result;
+            }
+        }
+    return greatest;
+	}
+
+/*
+* CPositionerQ::Count
+*
+* @return count of MPositioner objects in the queue
+*/
+TUint CPositionerQ::Count()
+	{
+	return iPsyArray.Count();
+	}
+	
+TInt CPositionerQ::Index(MPositioner& aPSY)
+    {
+    TInt index = KErrNotFound;
+    TInt count = iPsyArray.Count();
+
+    for(TInt i=0; i<count; i++)
+        {
+        if(iPsyArray[i] == &aPSY)
+            {
+            index = i;
+            }
+        }
+	return index;
+	}    
+/*
+* CPositionerQ::Positioner
+*
+* @return MPositioner pointer for requested index
+*/
+MPositioner& CPositionerQ::Positioner(TUint aIndex)
+	{
+	return *(iPsyArray[aIndex]);
+	}
+	
+//  End of File
+