--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contextframework/cfw/src/cfserver/CFCacheElement.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,307 @@
+/*
+* Copyright (c) 2002-2006 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: CCFCacheElement class implementation.
+*
+*/
+
+
+#include "CFCacheElement.h"
+#include "CFContextObjectImpl.h"
+#include "cftrace.h"
+#include "cfcontextsourceinterface.h"
+
+// CONSTANTS
+
+#ifdef _DEBUG
+// Panic category
+_LIT( KPanicCat, "CONTEXTCACHE" );
+
+// Panic codes
+enum TPanicReason
+ {
+ EInvalidSubscriptionIndex,
+ };
+
+// Local panic function
+LOCAL_C void Panic( TInt aCode )
+ {
+ User::Panic( KPanicCat, aCode );
+ }
+#endif
+
+// MEMBER FUNCTIONS
+
+CCFCacheElement* CCFCacheElement::NewL()
+ {
+ FUNC_LOG;
+
+ CCFCacheElement* self = CCFCacheElement::NewLC();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+CCFCacheElement* CCFCacheElement::NewLC()
+ {
+ FUNC_LOG;
+
+ CCFCacheElement* self = new( ELeave ) CCFCacheElement;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+
+ return self;
+ }
+
+CCFCacheElement::~CCFCacheElement()
+ {
+ FUNC_LOG;
+
+ delete iContext;
+ iSubscriptions.Close();
+ }
+
+CCFCacheElement::CCFCacheElement()
+ {
+ FUNC_LOG;
+ }
+
+void CCFCacheElement::ConstructL()
+ {
+ FUNC_LOG;
+
+ iContext = CCFContextObject::NewL();
+ }
+
+// METHODS
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::Context
+//-----------------------------------------------------------------------------
+//
+CCFContextObject& CCFCacheElement::Context() const
+ {
+ FUNC_LOG;
+
+ return *iContext;
+ }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::AddSubscriptionL
+//-----------------------------------------------------------------------------
+//
+void CCFCacheElement::AddSubscriptionL(
+ CCFContextSubscriptionImpl& aSubscription )
+ {
+ FUNC_LOG;
+
+ iSubscriptions.AppendL( &aSubscription );
+
+ // notify context source if this was the first subscription
+ if (iSubscriptions.Count() == 1 && iPublisher )
+ {
+ iPublisher->Subscribers( iContext->Source(), iContext->Type() );
+ }
+ }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::RemoveSubscription
+//-----------------------------------------------------------------------------
+//
+void CCFCacheElement::RemoveSubscription( TInt aIndex )
+ {
+ FUNC_LOG;
+
+ __ASSERT_DEBUG( aIndex >= 0 && aIndex < iSubscriptions.Count(),
+ Panic( EInvalidSubscriptionIndex ) );
+
+ iSubscriptions.Remove( aIndex );
+
+ // notify context source if this was the first subscription
+ if (iSubscriptions.Count() == 0 && iPublisher )
+ {
+ iPublisher->NoSubscribers( iContext->Source(), iContext->Type() );
+ }
+ }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::NullifySubscription
+//-----------------------------------------------------------------------------
+//
+void CCFCacheElement::NullifySubscription( TInt aIndex )
+ {
+ FUNC_LOG;
+
+ __ASSERT_DEBUG( aIndex >= 0 && aIndex < iSubscriptions.Count(),
+ Panic( EInvalidSubscriptionIndex ) );
+
+ iSubscriptions[ aIndex ] = NULL;
+ }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::RemoveNullSubscriptions
+//-----------------------------------------------------------------------------
+//
+void CCFCacheElement::RemoveNullSubscriptions()
+ {
+ FUNC_LOG;
+
+ TInt count = iSubscriptions.Count();
+ for ( TInt i = count - 1; i >= 0; --i )
+ {
+ CCFContextSubscriptionImpl* subscription = iSubscriptions[ i ];
+ if ( !subscription )
+ {
+ iSubscriptions.Remove( i );
+ }
+ }
+
+ // notify context source if no more subscriptions exist
+ if ( count && iSubscriptions.Count() == 0 && iPublisher )
+ {
+ iPublisher->NoSubscribers( iContext->Source(), iContext->Type() );
+ }
+ }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::Subscriptions
+//-----------------------------------------------------------------------------
+//
+const RPointerArray<CCFContextSubscriptionImpl>& CCFCacheElement::Subscriptions() const
+ {
+ FUNC_LOG;
+
+ return iSubscriptions;
+ }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::SetReadSecurityPolicy
+//-----------------------------------------------------------------------------
+//
+void CCFCacheElement::SetReadSecurityPolicy(
+ const TSecurityPolicy& aSecurityPolicy )
+ {
+ FUNC_LOG;
+
+ iReadSecurityPolicy = aSecurityPolicy;
+ }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::GetReadSecurityPolicy
+//-----------------------------------------------------------------------------
+//
+const TSecurityPolicy& CCFCacheElement::GetReadSecurityPolicy() const
+ {
+ FUNC_LOG;
+
+ return iReadSecurityPolicy;
+ }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::SetWriteSecurityPolicy
+//-----------------------------------------------------------------------------
+//
+void CCFCacheElement::SetWriteSecurityPolicy(
+ const TSecurityPolicy& aSecurityPolicy )
+ {
+ FUNC_LOG;
+
+ iWriteSecurityPolicy = aSecurityPolicy;
+ }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::GetWriteSecurityPolicy
+//-----------------------------------------------------------------------------
+//
+const TSecurityPolicy& CCFCacheElement::GetWriteSecurityPolicy() const
+ {
+ FUNC_LOG;
+
+ return iWriteSecurityPolicy;
+ }
+
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::SetContextPublisher
+//-----------------------------------------------------------------------------
+//
+void CCFCacheElement::SetContextPublisher( MCFContextSource* aPublisher )
+ {
+ FUNC_LOG;
+
+ iPublisher = aPublisher;
+ }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::SetContextPublisher
+//-----------------------------------------------------------------------------
+//
+void CCFCacheElement::SetContextPublisher(
+ MCFContextSource* aPublisher, const TUid& aPublisherUid )
+ {
+ FUNC_LOG;
+
+ iPublisher = aPublisher;
+ iPublisherUid = aPublisherUid;
+ }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::ContextPublisher
+//-----------------------------------------------------------------------------
+//
+const MCFContextSource* CCFCacheElement::ContextPublisher() const
+ {
+ FUNC_LOG;
+
+ return iPublisher;
+ }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::PublisherUid
+//-----------------------------------------------------------------------------
+//
+const TUid& CCFCacheElement::PublisherUid() const
+ {
+ FUNC_LOG;
+
+ return iPublisherUid;
+ }
+
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::CompareByTypeAndSource
+//-----------------------------------------------------------------------------
+//
+TInt CCFCacheElement::CompareByTypeAndSource(
+ const CCFCacheElement& aFirst,
+ const CCFCacheElement& aSecond)
+ {
+ FUNC_LOG;
+
+ return CCFContextObjectImpl::CompareByTypeAndSource(
+ *aFirst.iContext, *aSecond.iContext );
+ }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::CompareByType
+//-----------------------------------------------------------------------------
+//
+TInt CCFCacheElement::CompareByType(
+ const CCFCacheElement& aFirst,
+ const CCFCacheElement& aSecond)
+ {
+ FUNC_LOG;
+
+ return CCFContextObjectImpl::CompareByType(
+ *aFirst.iContext, *aSecond.iContext);
+ }