diff -r 6205fd287e8a -r 1abc632eb502 menufw/hierarchynavigator/hnmetadatamodel/src/hnxmlmodelcache.cpp --- a/menufw/hierarchynavigator/hnmetadatamodel/src/hnxmlmodelcache.cpp Thu Mar 18 14:45:17 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,204 +0,0 @@ -/* -* Copyright (c) 2007-2008 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 "hnxmlmodelcache.h" -#include "hnglobals.h" - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TUint32 HBufCHashCache( HBufC* const & aBuf ) - { - return DefaultHash::Des16(*aBuf); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool HBufCIdentCache( HBufC* const & aL, HBufC* const & aR ) - { - return DefaultIdentity::Des16(*aL, *aR); - } - - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CHnXmlModelCache::CHnXmlModelCache() : iDocuments( &HBufCHashCache, - &HBufCIdentCache ) - { - - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CHnXmlModelCache::ConstructL() - { - - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CHnXmlModelCache::RemoveUnused() - { - // remove unnecessary (oldest and unused) xml cached documents - if(iDocuments.Count() > KXmlModelCacheMaxLength) - { - HBufC *suiteToRemove = iOrder[0]; - RXmlEngDocument* document = iDocuments.Find( suiteToRemove ); - document->Close(); - iDocuments.Remove(suiteToRemove); - iOrder.Remove(0); - delete suiteToRemove; - } - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TInt CHnXmlModelCache::AddL( const TDesC& aSuiteName, RXmlEngDocument& aDocument ) - { - HBufC* key = aSuiteName.AllocLC(); - iDocuments.InsertL( key, aDocument ); - CleanupStack::Pop( key ); - iOrder.AppendL( key ); - RemoveUnused(); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -TBool CHnXmlModelCache::IsCachedL( const TDesC& aSuiteName ) - { - HBufC* buf = aSuiteName.AllocLC(); - const RXmlEngDocument* res = iDocuments.Find( buf ); - CleanupStack::PopAndDestroy( buf ); - - if ( res ) - return ETrue; - else - return EFalse; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CHnXmlModelCache::MoveToTopL( const TDesC & aSuiteName ) - { - TInt pos( KErrNotFound ); - - for ( TInt i(0); i < iOrder.Count(); i++ ) - { - if ( !iOrder[i]->Compare( aSuiteName ) ) - { - pos = i; - break; - } - } - - // if document was found and is not the latest in the array - if ( pos != KErrNotFound && ( pos != iOrder.Count() - 1 ) ) - { - HBufC *tmp = iOrder[ pos ]; - iOrder.Remove( pos ); - iOrder.AppendL( tmp ); - } - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CHnXmlModelCache::GetL( const TDesC& aSuiteName, - RXmlEngDocument& aDocument ) - { - HBufC* buf = aSuiteName.AllocLC(); - const RXmlEngDocument* res = iDocuments.Find( buf ); - - MoveToTopL( aSuiteName ); - - if ( res ) - { - aDocument = *res; - } - - CleanupStack::PopAndDestroy( buf ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CHnXmlModelCache* CHnXmlModelCache::NewLC() - { - CHnXmlModelCache* self = new (ELeave) CHnXmlModelCache(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CHnXmlModelCache* CHnXmlModelCache::NewL() - { - CHnXmlModelCache* self = CHnXmlModelCache::NewLC(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CHnXmlModelCache::Reset() - { - THashMapIter iter( iDocuments ); - while ( HBufC* const * ptr = iter.NextKey() ) - { - RXmlEngDocument* currentDocument = iter.CurrentValue(); - currentDocument->Close(); - delete *ptr; - } - iDocuments.Close(); - // Names have already been destroyed when destroying iDocuments so - // it is not necessay to destroy elements of the iOrder array. - iOrder.Close(); - } - - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CHnXmlModelCache::~CHnXmlModelCache() - { - Reset(); - }