diff -r 000000000000 -r 08ec8eefde2f persistentstorage/sql/OsLayer/SqliteSymbian.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/persistentstorage/sql/OsLayer/SqliteSymbian.h Fri Jan 22 11:06:30 2010 +0200 @@ -0,0 +1,116 @@ +// Copyright (c) 2005-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: +// + +#ifndef __SQLITESYMBIAN_H__ +#define __SQLITESYMBIAN_H__ + +#include + +//Forward declarations +class RFs; +typedef struct sqlite3 sqlite3; + +TInt sqlite3SymbianLastOsError(void); +TInt sqlite3SymbianLibInit(void); +void sqlite3SymbianLibFinalize(void); +RFs& sqlite3SymbianFs(void); + +TInt sqlite3SymbianProfilerStart(TInt aCounterType); +TInt sqlite3SymbianProfilerStop(TInt aCounterType); +TInt sqlite3SymbianProfilerReset(TInt aCounterType); +TInt sqlite3SymbianProfilerQuery(TInt aCounterType, TDes8& aResult); + +/** +The operation code for registering a free page callback. + +@see TSqlFreePageCallback + +@internalComponent +*/ +const TInt KSqlFcntlRegisterFreePageCallback = 1000001; + +/** +This structure is used for sending a request (via TVfs::FileControl()) to the OS porting layer to +register a free page callback - TSqlFreePageCallback::iCallback, which will be called when the number of +the free pages reaches or is above the threshold - TSqlFreePageCallback::iThreshold. + +@see TSqlFreePageCallback + +@internalComponent +*/ +NONSHARABLE_STRUCT(TSqlFreePageCallback) + { + /** + "Free page" callback type definition. + */ + typedef void (*TCallback)(void* aThis, TInt aFreePageCount); + + inline TSqlFreePageCallback(); + inline TSqlFreePageCallback(void* aThis, TInt aFreePageThreshold, TCallback aCallback); + inline TBool IsValid() const; + inline void CheckAndCallback(TInt aFreePageCount) const; + + void* iThis; //"this" pointer of the object that has to be called back + TInt iThreshold; //"free page threshold" in pages + TCallback iCallback; //a pointer to the callback function + + }; + +/** +Initalizes TSqlFreePageCallback data members with their default values. +*/ +inline TSqlFreePageCallback::TSqlFreePageCallback() : + iThis(NULL), + iThreshold(0), + iCallback(NULL) + { + } + +/** +Initalizes TSqlFreePageCallback data members with the supplied callback values. + +@param aThis "this" pointer of the object that has to be called back, +@param aThreshold "free page threshold" in pages, +@param aCallback a pointer to the callback function; +*/ +inline TSqlFreePageCallback::TSqlFreePageCallback(void* aThis, TInt aFreePageThreshold, TSqlFreePageCallback::TCallback aCallback) : + iThis(aThis), + iThreshold(aFreePageThreshold), + iCallback(aCallback) + { + } + +/** +@return True if this is a valid (initialized) callback object. +*/ +inline TBool TSqlFreePageCallback::IsValid() const + { + return iThis && iThreshold >= 0 && iCallback; + } + +/** +Calls the callback if aFreePageCount value is above the threshold. + +@param aFreePageCount Database free pages count +*/ +inline void TSqlFreePageCallback::CheckAndCallback(TInt aFreePageCount) const + { + if(aFreePageCount > 0 && aFreePageCount >= iThreshold) + { + (*iCallback)(iThis, aFreePageCount); + } + } + +#endif//__SQLITESYMBIAN_H__