multimediacommscontroller/mmcccontroller/src/mccresourceiterators.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmcccontroller/src/mccresourceiterators.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,355 @@
+/*
+* 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:    
+*
+*/
+
+
+
+
+#include "mccresourceiterators.h"
+#include "mccresourcecontainer.h"
+#include "mccresourceitem.h"
+#include <mmf/server/mmfdatasink.h>
+#include <mmf/server/mmfdatasource.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// CONTAINER ITERATOR
+
+// -----------------------------------------------------------------------------
+// TMccResourceContainerIterator::TMccResourceContainerIterator
+// -----------------------------------------------------------------------------
+//
+TMccResourceContainerIterator::TMccResourceContainerIterator( 
+    const RPointerArray<CMccResourceContainer>& aContainers ) : 
+    iContainers( aContainers ),
+    iCurrentIndex( 0 ),
+    iResourceParams( NULL ),
+    iEndpointId( 0 )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// TMccResourceContainerIterator::TMccResourceContainerIterator
+// -----------------------------------------------------------------------------
+//
+TMccResourceContainerIterator::TMccResourceContainerIterator( 
+    const RPointerArray<CMccResourceContainer>& aContainers,
+    TMccResourceParams& aResourceParams ) : 
+    iContainers( aContainers ),
+    iCurrentIndex( 0 ),
+    iResourceParams( &aResourceParams ),
+    iEndpointId( 0 )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// TMccResourceContainerIterator::TMccResourceContainerIterator
+// -----------------------------------------------------------------------------
+//
+TMccResourceContainerIterator::TMccResourceContainerIterator( 
+    const RPointerArray<CMccResourceContainer>& aContainers,
+    TUint32 aEndpointId ) : 
+    iContainers( aContainers ),
+    iCurrentIndex( 0 ),
+    iResourceParams( NULL ),
+    iEndpointId( aEndpointId )
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// TMccResourceContainerIterator::Current
+// -----------------------------------------------------------------------------
+//
+TInt TMccResourceContainerIterator::Current()
+    {
+    TInt current = KErrNotFound;
+    
+    if ( iContainers.Count() > 0 )
+        {
+        current = iCurrentIndex-1;
+        current = current < 0 ? 0 : current;
+        }
+    return current;
+    }
+
+// -----------------------------------------------------------------------------
+// TMccResourceContainerIterator::IsEof
+// -----------------------------------------------------------------------------
+//
+TBool TMccResourceContainerIterator::IsEof()
+    {
+    return iContainers.Count() == 0 || iCurrentIndex >= iContainers.Count();
+    }
+
+// -----------------------------------------------------------------------------
+// TMccResourceContainerIterator::Next
+// -----------------------------------------------------------------------------
+//
+TBool TMccResourceContainerIterator::Next( 
+    CMccResourceContainer*& aCandidate,
+    TMccIteratorMatchType aMatchType )
+    {
+    CMccResourceContainer* next = NULL;
+    TBool negation = aMatchType == ExactMatch ? EFalse : ETrue;
+    
+    while( !next && !IsEof() )
+        {
+        CMccResourceContainer* container = iContainers[ iCurrentIndex ];
+        TBool condition = EFalse;
+
+        if ( iResourceParams )
+            {
+            if ( iResourceParams->iLinkId )
+                {
+                condition = ( container->LinkId() == iResourceParams->iLinkId );
+                }
+            else if ( iResourceParams->iStreamId )
+                {
+                condition = ( container->StreamId() == iResourceParams->iStreamId );
+                }
+            else if ( iEndpointId )
+                {
+                condition = ( container->FindResourceItem( iEndpointId ) != NULL );
+                }
+            else
+                {
+                }
+            }
+        else
+            {
+            condition = ETrue;
+            }
+            
+        next = ( ( negation && !condition ) ||
+               ( !negation && condition ) ) ? container : NULL;
+               
+        iCurrentIndex++;                            
+        }
+    
+    aCandidate = next;
+    return aCandidate != NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// TMccResourceContainerIterator::Delete
+// -----------------------------------------------------------------------------
+//
+TInt TMccResourceContainerIterator::Delete( RPointerArray<CMccResourceContainer>& aContainers )
+    {
+    TInt currentIndex = Current();
+    
+    if ( currentIndex != KErrNotFound && currentIndex < aContainers.Count() )
+        {
+        delete aContainers[ currentIndex ];
+        aContainers.Remove( currentIndex );
+        iCurrentIndex = currentIndex;
+        }
+    
+    return currentIndex;
+    }
+    
+// -----------------------------------------------------------------------------
+// TMccResourceContainerIterator::Reset
+// -----------------------------------------------------------------------------
+//
+void TMccResourceContainerIterator::Reset()
+    {
+    iCurrentIndex = 0;
+    }
+
+
+// RESOURCE ITEM ITERATOR
+
+// -----------------------------------------------------------------------------
+// TMccResourceItemIterator::TMccResourceItemIterator
+// -----------------------------------------------------------------------------
+//
+TMccResourceItemIterator::TMccResourceItemIterator( 
+    const RPointerArray<CMccResourceItem>& aItems,
+    TBool aOnlyInternals,
+    TBool aOnlySinks,
+    TBool aOnlySources ) : 
+    iItems( aItems ),
+    iCurrentIndex( 0 ),
+    iOnlyInternals( aOnlyInternals ),
+    iOnlySinks( aOnlySinks ),
+    iOnlySources( aOnlySources ),
+    iUid( KNullUid ),
+    iResourceParams( NULL ),
+    iEndpointId( 0 )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// TMccResourceItemIterator::TMccResourceItemIterator
+// -----------------------------------------------------------------------------
+//
+TMccResourceItemIterator::TMccResourceItemIterator( 
+    const RPointerArray<CMccResourceItem>& aItems, 
+    TUid aUid ) : 
+    iItems( aItems ),
+    iCurrentIndex( 0 ),
+    iOnlyInternals( EFalse ),
+    iOnlySinks( EFalse ),
+    iOnlySources( EFalse ),
+    iUid( aUid ),
+    iResourceParams( NULL ),
+    iEndpointId( 0 )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// TMccResourceItemIterator::TMccResourceItemIterator
+// -----------------------------------------------------------------------------
+//
+TMccResourceItemIterator::TMccResourceItemIterator( 
+    const RPointerArray<CMccResourceItem>& aItems,
+    TUid aUid,
+    TMccResourceParams& aResourceParams ) :
+    iItems( aItems ),
+    iCurrentIndex( 0 ),
+    iOnlyInternals( EFalse ),
+    iOnlySinks( EFalse ),
+    iOnlySources( EFalse ),
+    iUid( aUid ),
+    iResourceParams( &aResourceParams ),
+    iEndpointId( 0 )    
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// TMccResourceItemIterator::TMccResourceItemIterator
+// -----------------------------------------------------------------------------
+//
+TMccResourceItemIterator::TMccResourceItemIterator( 
+    const RPointerArray<CMccResourceItem>& aItems,
+    TMccResourceParams& aResourceParams ) : 
+    iItems( aItems ),
+    iCurrentIndex( 0 ),
+    iOnlyInternals( EFalse ),
+    iOnlySinks( EFalse ),
+    iOnlySources( EFalse ),
+    iUid( KNullUid ),
+    iResourceParams( &aResourceParams ),
+    iEndpointId( 0 )
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// TMccResourceItemIterator::TMccResourceItemIterator
+// -----------------------------------------------------------------------------
+//
+TMccResourceItemIterator::TMccResourceItemIterator( 
+    const RPointerArray<CMccResourceItem>& aItems,
+    TUint32 aEndpointId ) : 
+    iItems( aItems ),
+    iCurrentIndex( 0 ),
+    iOnlyInternals( EFalse ),
+    iOnlySinks( EFalse ),
+    iOnlySources( EFalse ),
+    iUid( KNullUid ),
+    iResourceParams(NULL ),
+    iEndpointId( aEndpointId )
+    {
+    }
+       
+// -----------------------------------------------------------------------------
+// TMccResourceItemIterator::Current
+// -----------------------------------------------------------------------------
+//
+TInt TMccResourceItemIterator::Current()
+    {
+    TInt current = KErrNotFound;
+    
+    if ( iItems.Count() > 0 )
+        {
+        current = iCurrentIndex-1;
+        current = current < 0 ? 0 : current;
+        }
+    return current;
+    }
+
+// -----------------------------------------------------------------------------
+// TMccResourceItemIterator::IsEof
+// -----------------------------------------------------------------------------
+//
+TBool TMccResourceItemIterator::IsEof()
+    {
+    return iItems.Count() == 0 || iCurrentIndex >= iItems.Count();
+    }
+
+// -----------------------------------------------------------------------------
+// TMccResourceItemIterator::Next
+// -----------------------------------------------------------------------------
+//
+TBool TMccResourceItemIterator::Next( 
+    CMccResourceItem*& aCandidate,
+    TMccIteratorMatchType aMatchType )
+    {
+    CMccResourceItem* next = NULL;
+    TBool negation = aMatchType == ExactMatch ? EFalse : ETrue;
+    
+    while( !next && !IsEof() )
+        {
+        CMccResourceItem* item = iItems[ iCurrentIndex ];
+        TBool condition = EFalse;
+        
+        if ( iUid != KNullUid )
+            {
+            condition = ( item->IsSink() && item->Sink()->DataSinkType() == iUid ) ||
+                        ( item->IsSource() && item->Source()->DataSourceType() == iUid );
+            if ( condition && iResourceParams )
+                {
+                condition = item->MatchSession( iResourceParams->iSessionId );
+                }
+            }
+        else if ( iResourceParams )
+            {
+            condition = item->Match( *iResourceParams );
+            }
+        else if ( iEndpointId )
+            {
+            condition = iEndpointId == item->EndpointId();
+            }
+        else
+            {
+            condition = ( !iOnlySinks || item->IsSink() ) &&
+                        ( !iOnlySources || item->IsSource() ) &&
+                        ( !iOnlyInternals || item->IsInternal() );
+            }
+            
+        next = ( ( negation && !condition ) ||
+               ( !negation && condition ) ) ? item : NULL;
+               
+        iCurrentIndex++;                            
+        }
+    
+    aCandidate = next;
+    return aCandidate != NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// TMccResourceItemIterator::Reset
+// -----------------------------------------------------------------------------
+//
+void TMccResourceItemIterator::Reset()
+    {
+    iCurrentIndex = 0;
+    }
+      
+// End of file
+