bintools/rcomp/src/STRUCTST.CPP
changeset 0 044383f39525
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bintools/rcomp/src/STRUCTST.CPP	Tue Oct 27 16:36:35 2009 +0000
@@ -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 <assert.h>
+#include <stdlib.h>
+#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()();
+	}