--- /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;
+}
+