tools/elf4rom/src/elfsection.cpp
changeset 34 92d87f2e53c2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/elf4rom/src/elfsection.cpp	Fri Jan 15 09:07:44 2010 +0000
@@ -0,0 +1,123 @@
+/*
+* 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 "outputfile.h"
+#include "inputfile.h"
+#include "filefragment.h"
+#include "elfsection.h"
+
+
+ElfSection & ElfSection::operator=(const ElfSection & aSection) {
+	iSectionName = aSection.iSectionName;
+	iSectionHdr = aSection.iSectionHdr;
+	iSectionData = aSection.iSectionData->Clone();
+	iIndex = aSection.iIndex;
+	return *this;
+}
+
+ElfSection::ElfSection(const ElfSection & aSection){
+	*this = aSection;
+}
+
+ElfSectionRomData::ElfSectionRomData(const ElfSectionRomData & aData) {
+	iOffset = aData.iOffset;
+	iSize = aData.iSize;
+}
+
+ElfSectionRomData * ElfSectionRomData::Clone(){
+	return new ElfSectionRomData(*this);
+}
+
+ElfSectionElfData::ElfSectionElfData(const ElfSectionElfData & aData) :
+	iSource(aData.iSource)
+{
+	iOffset = aData.iOffset;
+}
+
+ElfSectionElfData * ElfSectionElfData::Clone(){
+	return new ElfSectionElfData(*this);
+}
+
+void ElfSectionElfData::AddData(OutputFile & aOutputFile){
+	iSource.AddData(aOutputFile);
+}
+
+void ElfSectionElfData::GetFileFragmentData(FileFragmentData & aFileFragmentData ){
+	iSource.GetFileFragmentData(aFileFragmentData);
+}
+
+void ElfSectionElfData::DeleteFileFragmentData(){
+	iSource.DeleteFileFragmentData();	
+}
+
+size_t ElfSectionElfData::Size(){
+	return iSource.Size();
+}
+
+size_t ElfSectionElfData::GetOffset(){
+	return iSource.GetOffset();
+}
+
+ElfSectionFileData::ElfSectionFileData(const ElfSectionFileData & aData) {
+	iOffset = aData.iOffset;
+	iInputFile = aData.iInputFile;
+	iData = aData.iData;
+}
+
+ElfSectionFileData * ElfSectionFileData::Clone(){
+	return new ElfSectionFileData(*this);
+}
+
+void ElfSectionFileData::GetFileFragmentData(FileFragmentData & aFileFragmentData ){
+	iData = iInputFile->GetData();
+	SetFileFragmentData(aFileFragmentData, iInputFile->Size(), (char *)iData);
+}
+
+void ElfSectionFileData::DeleteFileFragmentData(){
+	if (iData) {
+		char * d = iData;
+		iData = NULL;
+		delete [] d;
+	}
+}
+
+size_t ElfSectionFileData::Size(){
+	return iInputFile->Size();
+}
+
+ElfSectionNoData::ElfSectionNoData(const ElfSectionNoData & aData) {
+	iOffset = aData.iOffset;
+}
+
+ElfSectionNoData * ElfSectionNoData::Clone(){
+	return new ElfSectionNoData(*this);
+}
+
+void ElfSectionNoData::GetFileFragmentData(FileFragmentData & aFileFragmentData ){
+	SetFileFragmentData(aFileFragmentData, 0u, reinterpret_cast<char *>(NULL));
+}
+
+ElfSection::~ElfSection(){
+	delete iSectionData;
+}
+
+void ElfSection::AddData(OutputFile & aOutputFile){
+	iSectionData->AddData(aOutputFile);
+	SetSize(iSectionData->Size());
+	SetOffset(iSectionData->GetOffset());
+}