diff -r c3fbb20e86f0 -r 46ca13b54f56 imgtools/imglib/symbolutil/bsymutil.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imgtools/imglib/symbolutil/bsymutil.cpp Wed Nov 17 16:47:32 2010 +0800 @@ -0,0 +1,120 @@ +/* +* Copyright (c) 1995-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 "bsymutil.h" +#include + + +MemoryWriter::MemoryWriter() +{ + iChar = new char[4*MaxSize]; + iOffset = 0; + iTotalSize = 4*MaxSize; + iStringTableStart = 0; +} +MemoryWriter::~MemoryWriter() +{ + delete[] iChar; +} +int MemoryWriter::WriteBytes(const char* pChar, int size) +{ + while(iOffset + size > iTotalSize) + { + ExtendMemory(); + } + memcpy(iChar + iOffset, pChar, size); + iOffset += size; + return size; +} +TUint32 MemoryWriter::GetOffset() +{ + return iOffset; +} +char* MemoryWriter::GetDataPointer() +{ + return iChar; +} +bool MemoryWriter::ExtendMemory() +{ + char* pTmp = new char[iTotalSize + MaxSize]; + memcpy(pTmp, iChar, iOffset); + delete[] iChar; + iChar = pTmp; + iTotalSize += MaxSize; + return true; +} +bool MemoryWriter::SetOffset(TUint32 aOffset) +{ + while(aOffset > iTotalSize) + { + ExtendMemory(); + } + iOffset = aOffset; + return true; +} +void MemoryWriter::AddEmptyString() +{ + unsigned char len = 0; + WriteBytes((char *)&len, 1); +} +TUint32 MemoryWriter::AddString(const string& aStr) +{ + TUint32 result = 0; + if(aStr.empty()) + return result; + result = iOffset - iStringTableStart; + int len = aStr.length(); + if(len >= 255) + { + TUint16 wlen = len; + unsigned char mark = 0xff; + WriteBytes((char*)&mark, 1); + WriteBytes((char*)&wlen, 2); + WriteBytes(aStr.c_str(), len); + } + else + { + unsigned char clen = len; + WriteBytes((char *)&clen, 1); + WriteBytes(aStr.c_str(), len); + } + return result; +} +TUint32 MemoryWriter::AddScopeName(const string& aStr) +{ + TUint32 result = 0; + if(aStr.empty()) + return result; + if(aStr == iLastScopeName) + { + return iLastScopeNameOffset; + } + else + { + iLastScopeName = aStr; + iLastScopeNameOffset = AddString(aStr); + } + return iLastScopeNameOffset; +} +void MemoryWriter::SetStringTableStart(TUint32 aOffset) +{ + iStringTableStart = aOffset; +} +TUint32 MemoryWriter::GetStringTableStart() +{ + return iStringTableStart; +}