diff -r 820b22e13ff1 -r 39c28ec933dd imgtools/imglib/memmap/source/memmaputils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imgtools/imglib/memmap/source/memmaputils.cpp Mon May 10 19:54:49 2010 +0100 @@ -0,0 +1,237 @@ +/* +* Copyright (c) 2008-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: +* +*/ + + +#include "memmaputils.h" + +/** +Constructor: MemmapUtils class +Initilize the parameters to data members. + +@internalComponent +@released +*/ +MemmapUtils::MemmapUtils( ) +: iHFile(0) +{ +#ifdef WIN32 + iHMMFile = 0; +#endif +} + + +/** +Destructor: MemmapUtils class +Deallocates the memory for data members + +@internalComponent +@released +*/ +MemmapUtils::~MemmapUtils( ) +{ + CloseMapFile(); + + DeleteMapFile(); +} + +/** +OpenMemMapPointer: Opens the memory map pointer + +@internalComponent +@released + +@param aOffset - Starting offset of the memory map +@param aSize - Size of the memory map +*/ +void* MemmapUtils::OpenMemMapPointer(unsigned long aOffset, unsigned long aSize) +{ +#ifdef WIN32 + // Create map view pointer + return (void*)MapViewOfFile(iHMMFile, FILE_MAP_ALL_ACCESS, 0, aOffset, aSize); +#else + return KStatFalse; +#endif +} + +/** +CloseMemMapPointer: Closes the memory map pointer + +@internalComponent +@released + +@param aData - Memory map pointer +@param aSize - Size of the memory map +*/ +int MemmapUtils::CloseMemMapPointer(void* aData, unsigned long aSize) +{ + unsigned long statusFlg = KStatFalse; + + if(aData && iHFile) + { +#ifdef WIN32 + statusFlg = FlushViewOfFile(aData, aSize); + statusFlg &= FlushFileBuffers((HANDLE)_get_osfhandle(iHFile)); + statusFlg &= UnmapViewOfFile(aData); +#endif + } + + if(statusFlg == (unsigned long)KStatFalse) + { + return KStatFalse; + } + + return KStatTrue; +} + +/** +OpenMapFile: Opens the file for memory mapping + +@internalComponent +@released +*/ +int MemmapUtils::OpenMapFile() +{ + GetMapFileName(iMapFileName); + + if(iMapFileName.empty()) + { + return KStatFalse; + } + +#ifdef WIN32 + iHFile = open((const char*)iMapFileName.data(), (_O_CREAT | _O_BINARY | _O_RDWR)); +#endif + + if((iHFile == (-1)) || (!iHFile)) + { + Print(EAlways, "Cannot open the memory map file %s", (char*)iMapFileName.data()); + iHFile = 0; + + return KStatFalse; + } + + return KStatTrue; +} + +/** +IsMapFileOpen: Returns the open status of the memory map file + +@internalComponent +@released +*/ +int MemmapUtils::IsMapFileOpen() +{ + return (iHFile) ? KStatTrue : KStatFalse; +} + +/** +CloseMapFile: Closes the file for memory mapping + +@internalComponent +@released +*/ +void MemmapUtils::CloseMapFile() +{ + if(iHFile) + { +#ifdef WIN32 + close(iHFile); +#endif + iHFile = 0; + } +} + +/** +DeleteMapFile: Deletes the file for memory mapping + +@internalComponent +@released +*/ +void MemmapUtils::DeleteMapFile() +{ +#ifdef WIN32 + unlink((char*)iMapFileName.data()); +#endif +} + +/** +CreateFileMapObject: Creates the map file object + +@internalComponent +@released + +@param aSize - Size of the memory map +*/ +int MemmapUtils::CreateFileMapObject(unsigned long aSize) +{ +#ifdef WIN32 + // Create memory map object for the given size of the file + iHMMFile = CreateFileMapping((HANDLE)_get_osfhandle(iHFile), NULL, + PAGE_READWRITE, 0, aSize, NULL); + + if(!iHMMFile || (iHMMFile == INVALID_HANDLE_VALUE)) + { + return KStatFalse; + } +#endif + + return KStatTrue; +} + +/** +CloseFileMapObject: Closes the map file object + +@internalComponent +@released +*/ +void MemmapUtils::CloseFileMapObject() +{ +#ifdef WIN32 + if(iHMMFile) + { + CloseHandle(iHMMFile); + iHMMFile = 0; + } +#endif +} + +/** +GetMapFileName: Generates a temporary file name + +@internalComponent +@released + +@param aFile - Returns the name of the temporary file +*/ +void MemmapUtils::GetMapFileName(String& aFile) +{ + char *fileName = 0; + +#ifdef WIN32 + fileName = new char[MAX_PATH]; + + if(fileName) + GetTempFileName(".", "MMAP", 0, fileName); + + aFile.assign(fileName); +#endif + + if(fileName) + delete[] fileName; + +} +