tools/elf4rom/src/elfstringtable.cpp
changeset 34 92d87f2e53c2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/elf4rom/src/elfstringtable.cpp	Fri Jan 15 09:07:44 2010 +0000
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+* 
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <string.h>
+
+#include "elfstringtable.h"
+
+void ElfStringTable::GetFileFragmentData(FileFragmentData & aFileFragmentData ){
+	size_t nbytes = Size();
+	iData = new char[nbytes];
+	memset(iData, 0, nbytes);
+	if (iStrings.size() > 0) {
+		StringList::iterator aString = iStrings.begin();
+		StringList::iterator end = iStrings.end();
+		while (aString != end) {
+			memcpy(iData + aString->iOffset, aString->iName.data(), aString->iName.size()); 
+			aString++;
+		}
+	}
+	SetFileFragmentData(aFileFragmentData, nbytes, reinterpret_cast<char *>(iData));
+}
+
+size_t ElfStringTable::Size() {
+	return iSize;
+}
+
+void ElfStringTable::DeleteFileFragmentData(){
+	if (iData) {
+		char * d = iData;
+		iData = NULL;
+		delete [] d;
+	}
+}
+
+size_t ElfStringTable::AddString(String aString){
+	size_t offset = iSize;
+	StringTableEntry sn(aString, offset);
+	iStrings.push_back(sn);
+	size_t ss = aString.size();
+	iSize += (ss + 1);
+	return offset;
+}