diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmcccontroller/src/mccresourceiterators.cpp --- /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 +#include + +// ============================ MEMBER FUNCTIONS =============================== + + +// CONTAINER ITERATOR + +// ----------------------------------------------------------------------------- +// TMccResourceContainerIterator::TMccResourceContainerIterator +// ----------------------------------------------------------------------------- +// +TMccResourceContainerIterator::TMccResourceContainerIterator( + const RPointerArray& aContainers ) : + iContainers( aContainers ), + iCurrentIndex( 0 ), + iResourceParams( NULL ), + iEndpointId( 0 ) + { + } + +// ----------------------------------------------------------------------------- +// TMccResourceContainerIterator::TMccResourceContainerIterator +// ----------------------------------------------------------------------------- +// +TMccResourceContainerIterator::TMccResourceContainerIterator( + const RPointerArray& aContainers, + TMccResourceParams& aResourceParams ) : + iContainers( aContainers ), + iCurrentIndex( 0 ), + iResourceParams( &aResourceParams ), + iEndpointId( 0 ) + { + } + +// ----------------------------------------------------------------------------- +// TMccResourceContainerIterator::TMccResourceContainerIterator +// ----------------------------------------------------------------------------- +// +TMccResourceContainerIterator::TMccResourceContainerIterator( + const RPointerArray& 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& 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& 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& 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& 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& 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& 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 +