diff -r 820b22e13ff1 -r 39c28ec933dd bintools/rcomp/src/STRUCTST.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bintools/rcomp/src/STRUCTST.CPP Mon May 10 19:54:49 2010 +0100 @@ -0,0 +1,252 @@ +/* +* 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 "STRUCTST.H" +#include "RESOURCE.H" +#include "TOKENS.H" +#include "ERRORHAN.H" + +// StructItem + +StructItem::StructItem(String aLabelToSet): + iLabel(aLabelToSet) + {} + +StructItem::~StructItem() + {} + +StructItem::StructItem(StructItem& /*aSource*/): ArrayItem() + { + assert(0); + } + +// SimpleStructItem + +SimpleStructItem::SimpleStructItem(DataType aItemTypeToSet,String aLabelToSet): + StructItem(aLabelToSet), + iItemType(aItemTypeToSet) + { + switch(iItemType) + { + case L_BYTE: + case L_WORD: + case L_LONG: + iDefault = "0"; + break; + case L_DOUBLE: + iDefault = "0.0"; + break; + } + } + +SimpleStructItem::SimpleStructItem(DataType aItemTypeToSet,String aLabelToSet,String aMaxLength): + StructItem(aLabelToSet), + iItemType(aItemTypeToSet), + iLengthLimit(aMaxLength) + { + switch(iItemType) + { + case L_BYTE: + case L_WORD: + case L_LONG: + iDefault = "0"; + break; + case L_DOUBLE: + iDefault = "0.0"; + break; + } + } + +ResourceItem* SimpleStructItem::NewResourceItem() + { + SimpleResourceItem* item=new SimpleResourceItem(this); + return(item); + } + +SimpleStructItem::~SimpleStructItem() + {} + +SimpleStructItem::SimpleStructItem(SimpleStructItem& aSource): + StructItem(aSource) + { + assert(0); + } + +SimpleStructItem& SimpleStructItem::operator=(SimpleStructItem& /*Source*/) + { + assert(0); + return *this; + } + +// ArrayStructItem + +ArrayStructItem::ArrayStructItem(DataType aItemTypeToSet,String aLabelToSet): + StructItem(aLabelToSet), + iItemType(aItemTypeToSet), + iLenType(0) + {} + +ArrayStructItem::~ArrayStructItem() + { + iDefaults.DeleteAll(); + } + +ResourceItem * ArrayStructItem::NewResourceItem() + { + return new ArrayResourceItem( this); + } + +// StructTypeStructItem + +StructTypeStructItem::StructTypeStructItem(String aLabelToSet): + StructItem(aLabelToSet) + {} + +ResourceItem * StructTypeStructItem::NewResourceItem() + { + return new StructTypeResourceItem( this); + } + +// StructArrayStructItem + +StructArrayStructItem::StructArrayStructItem(String aLabelToSet): + StructItem(aLabelToSet), + iLenType(0) + {} + +StructArrayStructItem::StructArrayStructItem(String aLabelToSet,String aSizeToSet): + StructItem(aLabelToSet), + iLenType(0), + iSize(aSizeToSet) + {} + +ResourceItem * StructArrayStructItem::NewResourceItem() + { + return new StructArrayResourceItem( this); + } + +StructArrayStructItem::~StructArrayStructItem() + {} + +// StructItemArray + +StructItemArray::StructItemArray() + {} + +StructItemArray::~StructItemArray() + { + DeleteAll(); + } + +void StructItemArray::Add( StructItem * pNewItem) + { + StructItemArrayIterator next( * this); + StructItem * p; + + while( ( p = next() ) != NULL) + { + if ( p->iLabel == pNewItem->iLabel) + { + ErrorHandler::OutputErrorLine( "Label already in this structure."); + exit(1); + } + } + Array::Add( pNewItem); + } + +// StructItemArrayIterator + +StructItemArrayIterator::StructItemArrayIterator(const StructItemArray& aArray): + ArrayIterator(aArray) + {} + +StructItem* StructItemArrayIterator::operator()() + { + return ( StructItem *) ArrayIterator::operator()(); + } + +// StructHeader + +StructHeader::StructHeader(String aLabelToSet): + iLabel(aLabelToSet), + iLenType( 0) + {} + +StructHeader::StructHeader(String aLabelToSet,DataType aLenTypeToSet): + iLabel(aLabelToSet), + iLenType(aLenTypeToSet) + {} + +// StructHeaderArray + +int StructHeaderArray::iInUse = 0; + +StructHeaderArray::StructHeaderArray() + { + assert( iInUse == 0); + iInUse = 1; + } + +StructHeaderArray::~StructHeaderArray() + { + assert( iInUse == 1); + iInUse = 0; + DeleteAll(); + } + +void StructHeaderArray::Add( StructHeader * pNewItem) + { + StructHeaderArrayIterator next( * this); + StructHeader * p; + + while( ( p = next() ) != NULL) + { + if ( p->iLabel == pNewItem->iLabel) + { + ErrorHandler::OutputErrorLine( "STRUCT with this name already stored"); + exit(1); + } + } + Array::Add( pNewItem); + } + +StructHeader * StructHeaderArray::Find( const String & LabelSought) + { + StructHeaderArrayIterator next( * this); + StructHeader * p; + + while( ( p = next() ) != NULL) + if ( p->iLabel == LabelSought) + return p; + + ErrorHandler::OutputErrorLine( "Label not found"); + exit(1); + } + +// StructHeaderArrayIterator + +StructHeaderArrayIterator::StructHeaderArrayIterator(const StructHeaderArray& aArray): + ArrayIterator(aArray) + {} + +StructHeader * StructHeaderArrayIterator::operator()() + { + return (StructHeader*)ArrayIterator::operator()(); + }