diff -r c7c26511138f -r 360bd6b35136 imgtools/imglib/memmap/source/memmap.cpp --- a/imgtools/imglib/memmap/source/memmap.cpp Wed Jun 16 16:51:40 2010 +0300 +++ b/imgtools/imglib/memmap/source/memmap.cpp Wed Jun 23 16:56:47 2010 +0800 @@ -1,283 +1,257 @@ -/* -* 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; -} - +/* +* 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, const 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(const 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( ) { + + + if(!iData) { + Print(EAlways, "Memory map has not been created"); + } + + if(iOutFileName.empty()) { + Print(EAlways, "Output file has not been set"); + return; + } + + ofstream ofs(iOutFileName.c_str(), ios_base::out + ios_base::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; +} +