diff -r 000000000000 -r 044383f39525 bintools/rcomp/src/INDEXTAB.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bintools/rcomp/src/INDEXTAB.CPP Tue Oct 27 16:36:35 2009 +0000 @@ -0,0 +1,136 @@ +/* +* Copyright (c) 1997-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 +#include +#include "ERRORHAN.H" +#include "INDEXTAB.H" + +#if defined(__MSVCDOTNET__) || defined(__TOOLS2__) +using std::hex; +using std::dec; +using std::endl; +using std::ostream; +#endif //__MSVCDOTNET__ + +int IndexTable::iInUse = 0; + +IndexTableItem::IndexTableItem(ResourceHeader* aResource) + { + iResource=aResource; + iOffset[0] = '\0'; + iOffset[1] = '\0'; + } + +IndexTableItem::~IndexTableItem() + { + delete iResource; + } + +void IndexTableItem::SetOffset(unsigned long aOffsetToSet) + { + assert(aOffsetToSet <= 0xFFFF); + + iOffset[0] = char(aOffsetToSet & 0xFF); + iOffset[1] = char((aOffsetToSet & 0xFF00)>>8); + } + +RCBinaryStream & operator<< ( RCBinaryStream & os, const IndexTableItem & o) + { + os.Write( o.iOffset, 2); + return os; + } + +ostream & operator<< ( ostream & os, const IndexTableItem & o) + { + unsigned long offset = (o.iOffset[1]<<8)|o.iOffset[0]; + os << "IndexTableItem " << hex << offset << dec << "\t" << o.iResource->iLabel << endl; + return os; + } + +IndexTable::IndexTable() + { + assert( !iInUse); + iInUse = 1; // Only one instance can be created at a time. This is because the class + } // manages a lump of memory which is freed on destruction. + +IndexTable::~IndexTable() + { + assert( iInUse); + DeleteAll(); + iInUse = 0; + } + +void IndexTable::Add( ResourceHeader* aResource) + { + Array::Add( new IndexTableItem( aResource) ); + } + +void IndexTable::SetIndexOffset(unsigned long aOffsetToSet) + { + assert(aOffsetToSet <= 0xFFFF); + + iOffset[0] = char(aOffsetToSet & 0xFF); + iOffset[1] = char((aOffsetToSet & 0xFF00)>>8); + } + + +ostream & operator<< ( ostream & os, const IndexTable & o) + { + os << "IndexTable" << endl; + + if ( o.Size() == 0) + { + os << "" << endl; + return os; + } + + IndexTableIterator next( o); + IndexTableItem * p; + + while( ( p = next() ) != NULL) + os << * p; + + unsigned long offset = (o.iOffset[1]<<8)|o.iOffset[0]; + os << "IndexTable " << hex << offset << dec << endl; + return os; + } + +RCBinaryStream & operator<< ( RCBinaryStream & os, const IndexTable & o) + { + if ( o.Size() == 0) + return os; + + IndexTableIterator next( o); + IndexTableItem * p; + + while( ( p = next() ) != NULL) + os << * p; + + os.Write( o.iOffset, 2); + return os; + } + +IndexTableIterator::IndexTableIterator(const IndexTable & a): + ArrayIterator(a) + {} + +IndexTableItem * IndexTableIterator::operator() () + { + return (IndexTableItem *) ArrayIterator::operator() (); + }