author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
// Copyright (c) 2006-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: // #include "CacheBase.h" /** Constructor Initialized the iCachedItems array with granularity 8 and an offset to iHandle in TCacheEntry, which will be used to find specific entries later. */ CCacheBase::CCacheBase() : iCachedItems(8, _FOFF(TCacheEntry, iHandle)) { } CCacheBase::~CCacheBase() { for(TInt i = 0; i < iCachedItems.Count(); i++) { delete iCachedItems[i].iCachedItem; iCachedItems[i].iCachedItem = NULL; } iCachedItems.Reset(); } /** Begins an update of the cache. */ void CCacheBase::BeginUpdate() { // Sets all cached items to not used for(TInt i = 0; i < iCachedItems.Count(); i++) { iCachedItems[i].iIsUsed = EFalse; } } /** End an update of the cache. */ void CCacheBase::EndUpdate() { // Removes all cached items that are not used for(TInt i = 0; i < iCachedItems.Count(); i++) { if(!iCachedItems[i].iIsUsed) { delete iCachedItems[i].iCachedItem; iCachedItems.Remove(i--); } } } /** Returns an item from the cache corresponding to a specific handle. @param aHandle A handle to match against an item in the cache. @return The item that matches the handle provided as a parameter. */ const CBase* CCacheBase::Resolve(TInt aHandle) { TCacheEntry entry(aHandle); TInt index = iCachedItems.FindInUnsignedKeyOrder(entry); if(index != KErrNotFound) return iCachedItems[index].iCachedItem; else return NULL; }