Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h)
Have multiple extension sections in the bld.inf, one for each version
of the compiler. The RVCT version building the tools will build the
runtime libraries for its version, but make sure we extract all the other
versions from zip archives. Also add the archive for RVCT4.
// 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 the License "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:
// f32\sfile\sf_cache_client.h
//
//
/**
@file
@internalTechnology
@released
*/
#if !defined(__SF_CACHE_CLIENT_H__)
#define __SF_CACHE_CLIENT_H__
#include "sf_cache_man.h"
// fwd refs
class CCacheManager;
NONSHARABLE_CLASS(CCacheClient) : public CBase
{
public:
~CCacheClient();
void Purge(TBool aPurgeDirty = EFalse);
TUint8* AllocateAndLockSegments(TInt64 aPos, TInt& aSegmentCount, TBool aMakeDirty, TBool aExtendExisting);
TUint8* FindAndLockSegments(TInt64 aPos, TInt& aSegmentCount, TInt& aFilledSegmentCount, TInt& aLockError, TBool aMakeDirty);
TUint8* FindSegment(TInt64 aPos);
void UnlockSegments(TInt64 aPos);
void MarkSegmentsAsFilled(TInt64 aPos, TInt aSegmentCount);
void MarkSegmentsAsDirty(TInt64 aPos, TInt aSegmentCount);
TInt FindFirstDirtySegment(TInt64& aPos, TUint8*& aAddr);
void MarkSegmentsAsClean(TInt64 aPos);
void SetMaxSegments(TInt aMaxSegments);
TBool SegmentEmpty(TInt64 aPos);
TBool SegmentDirty(TInt64 aPos);
TBool TooManyLockedSegments();
inline TInt CacheOffset(TInt64 aLinAddr) const \
{return(I64LOW(aLinAddr)& ((1 << iManager.SegmentSizeLog2())-1));}
TInt SegmentSize();
TInt SegmentSizeLog2();
TInt64 SegmentSizeMask();
TInt CacheLineSize();
TInt CacheLineSizeInSegments();
#if defined(_DEBUG) || defined(_DEBUG_RELEASE)
void DumpCache();
#endif
private:
// class can only be instantiated from friend class CCacheManager
static CCacheClient* NewL(CCacheManager& aManager);
void ConstructL();
CCacheClient(CCacheManager& aManager);
TInt LockSegments(TInt64 aPos, TInt aSegmentCount, TBool aMakeDirty);
const CCacheManager::TCacheLine* FindCacheLine(TInt64 aPos);
TInt FindCacheLineIndex(TInt64 aPos);
TBool FreeCacheLine(const CCacheManager::TCacheLine* aCacheLine);
void RemoveCacheLine(const CCacheManager::TCacheLine* aCacheLine);
void RemoveEmptySegments(const CCacheManager::TCacheLine* aCacheLine);
void RemoveLru(const CCacheManager::TCacheLine* aCacheLineToExclude);
inline TInt StartSegment(const CCacheManager::TCacheLine* aCacheLine, TInt64 aPos);
inline TInt CacheLineLen(const CCacheManager::TCacheLine* aCacheLine);
TInt CachedBytes();
TInt LockedBytes();
private:
CCacheManager& iManager;
// segment array for segments that contain valid data
RPointerArray<CCacheManager::TCacheLine>* iCacheLines;
TInt iMaxBytesCached;
TInt iLastCacheLineIndex;
friend class CCacheManager;
};
#endif