persistentstorage/sql/OsLayer/SqliteSymbian.h
changeset 0 08ec8eefde2f
--- /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 <e32std.h>
+
+//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__