diff -r 000000000000 -r 044383f39525 imgtools/imglib/memmap/source/memmap.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imgtools/imglib/memmap/source/memmap.cpp Tue Oct 27 16:36:35 2009 +0000 @@ -0,0 +1,283 @@ +/* +* 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 "memmap.h" + +/** +Constructor: Memmap class +Initilize the parameters to data members. + +@internalComponent +@released + +@param aFillFlg - Flag to enable the initialisation of memory map +@param aOutputFile - Name of the output file +*/ +Memmap::Memmap( int aFillFlg, String aOutputFile ) +: iOutFileName(aOutputFile), iData(0), iMaxMapSize(0), iStartOffset(0), iFillFlg(aFillFlg) +{ + iUtils = new MemmapUtils(); +} + +/** +Constructor: Memmap class +Initilize the parameters to data members. + +@internalComponent +@released + +@param aFillFlg - Flag to enable the initialisation of memory map +*/ +Memmap::Memmap( int aFillFlg ) +: iData(0), iMaxMapSize(0), iStartOffset(0), iFillFlg(aFillFlg) +{ + iUtils = new MemmapUtils(); +} + + +/** +Destructor: Memmap class +Deallocates the memory for data members + +@internalComponent +@released +*/ +Memmap::~Memmap( ) +{ + if(iData) + { + CloseMemoryMap(); + } + + if(iUtils) + { + delete iUtils; + } +} + +/** +SetOutputFile: To set the output image file + +@internalComponent +@released + +@param aOutputFile - Name of the output image file +*/ +void Memmap::SetOutputFile( String aOutputFile ) +{ + iOutFileName = aOutputFile; +} + +/** +SetMaxMapSize: To set the maximum size of the memory map + +@internalComponent +@released + +@param aMaxSize - Size of the memory map +*/ +void Memmap::SetMaxMapSize( unsigned long aMaxSize ) +{ + iMaxMapSize = aMaxSize; +}; + +/** +GetMapSize: To get the size of the memory map + +@internalComponent +@released +*/ +unsigned long Memmap::GetMapSize( ) +{ + return iMaxMapSize; +} + +/** +operator[]: To access the memory map contents + +@internalComponent +@released + +@param aIndex - Offset of the memory map location +*/ +char& Memmap::operator[]( unsigned long aIndex ) +{ + return iData[aIndex]; +} + +/** +CreateMemoryMap: + Opens the memory map file + Initialises the map size member + Create the memory map pointer + Fill the memory map with the specified value + +@internalComponent +@released + +@param aStartOffset - Start offset of the memory map location +@param aFillVal - Value to be filled in the memory map +*/ +int Memmap::CreateMemoryMap( unsigned long aStartOffset, unsigned char aFillVal ) +{ + if((!iMaxMapSize) || (aStartOffset > iMaxMapSize)) + { + return KStatFalse; + } + else if(iUtils->IsMapFileOpen() && iData) + { + iStartOffset = aStartOffset; + return KStatTrue; + } + + if(iUtils->IsMapFileOpen() == KStatFalse) + { + if(iUtils->OpenMapFile() == KStatFalse) + { + return KStatFalse; + } + } + + if(iUtils->CreateFileMapObject(iMaxMapSize) == KStatFalse) + { + return KStatFalse; + } + + iData = (char*)(iUtils->OpenMemMapPointer(0,iMaxMapSize)); + if( !iData ) + { + return KStatFalse; + } + + iStartOffset = aStartOffset; + + if(iFillFlg) + { + return FillMemMap( aFillVal ); + } + + return KStatTrue; +} + +/** +CloseMemoryMap: Close the memory map and the associated objects + +@internalComponent +@released + +@param aCloseFile - Flag to close the memory map file +*/ +void Memmap::CloseMemoryMap( int aCloseFile ) +{ + // Close map view pointer + if(!iUtils->CloseMemMapPointer((void*)iData, iMaxMapSize)) + { + Print(ELog, "Failed to unmap the memory map object"); + } + iData = 0; + + iUtils->CloseFileMapObject(); + + // Close map file + if(aCloseFile) + { + iUtils->CloseMapFile(); + } +} + +/** +GetMemoryMapPointer: Get the stating address of the memory map + +@internalComponent +@released +*/ +char *Memmap::GetMemoryMapPointer( ) +{ + if(iData) + return (iData + iStartOffset); + + return KStatFalse; +} + +/** +WriteToOutputFile: Writes the memory map contents to the output file + +@internalComponent +@released +*/ +void Memmap::WriteToOutputFile( ) +{ + Ofstream ofs; + + if(!iData) + { + Print(EAlways, "Memory map has not been created"); + } + + if(iOutFileName.empty()) + { + Print(EAlways, "Output file has not been set"); + return; + } + + ofs.open(((const char*)iOutFileName.data()), std::ios::binary); + if(!ofs.is_open()) + { + Print(EAlways, "Cannot open output file %s", (char*)iOutFileName.data()); + return; + } + + ofs.write((const char*)(iData + iStartOffset), (iMaxMapSize - iStartOffset)); + + ofs.close(); + + return; +} + +/** +FillMemMap: Fills the memory map with the specified value + +@internalComponent +@released + +@param aFillVal - Value to be filled +*/ +int Memmap::FillMemMap( unsigned char aFillVal ) +{ + if(iData) + { + // Fill the value + memset(iData, aFillVal, iMaxMapSize); + + // Unmap the file + if(iUtils->CloseMemMapPointer((void*)iData, iMaxMapSize) == KStatFalse) + { + return KStatFalse; + } + + // Map it again + iData = (char*)(iUtils->OpenMemMapPointer(0,iMaxMapSize)); + if(!iData) + { + return KStatFalse; + } + } + + return KStatTrue; +} +