summaryrefslogtreecommitdiffstats
path: root/kpovmodeler/pmsymboltable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kpovmodeler/pmsymboltable.cpp')
-rw-r--r--kpovmodeler/pmsymboltable.cpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/kpovmodeler/pmsymboltable.cpp b/kpovmodeler/pmsymboltable.cpp
new file mode 100644
index 00000000..bd1aab3b
--- /dev/null
+++ b/kpovmodeler/pmsymboltable.cpp
@@ -0,0 +1,121 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2001 by Andreas Zehender
+ email : zehender@kde.org
+**************************************************************************
+
+**************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+**************************************************************************/
+
+#include "pmsymboltable.h"
+#include "pmdeclare.h"
+#include "pmdebug.h"
+
+#include <string.h>
+
+PMSymbol::PMSymbol( const QString& id, PMDeclare* o )
+{
+ setId( id );
+ m_type = Object;
+ m_pObj = o;
+ m_pVal = 0;
+ m_pRenamedSymbol = 0;
+}
+
+PMSymbol::PMSymbol( const QString& id, const PMValue& v )
+{
+ setId( id );
+ m_type = Value;
+ m_pObj = 0;
+ m_pVal = new PMValue( v );
+ m_pRenamedSymbol = 0;
+}
+
+PMSymbol::~PMSymbol( )
+{
+ if( m_pVal )
+ delete m_pVal;
+}
+
+void PMSymbol::setId( const QString& id )
+{
+ m_id = id.left( MaxIDLength );
+}
+
+PMDeclare* PMSymbol::object( ) const
+{
+ if( m_type == Object )
+ return m_pObj;
+ kdError( PMArea ) << "Symbol is not an object\n";
+ return 0;
+}
+
+PMValue PMSymbol::value( ) const
+{
+ if( m_type == Value )
+ return *m_pVal;
+ kdError( PMArea ) << "Symbol is not a value\n";
+ return PMValue( );
+}
+
+
+PMSymbolTable::PMSymbolTable( )
+ : QDict<PMSymbol>( 1009 ), m_lastID( 47 )
+{
+ setAutoDelete( true );
+ m_lastID.setAutoDelete( true );
+}
+
+PMSymbolTable::~PMSymbolTable( )
+{
+ clear( );
+}
+
+QString PMSymbolTable::findNewID( const QString& prefix )
+{
+ PMSymbol* symbol;
+ QString testID;
+ unsigned int number;
+
+ int* lastNumber = m_lastID.find( prefix );
+ if( lastNumber )
+ number = *lastNumber + 1;
+ else
+ number = 0;
+
+ // find next free id
+ do
+ {
+ testID = prefix + QString( "%1" ).arg( number );
+ symbol = find( testID );
+ if( symbol )
+ number++;
+ }
+ while( symbol );
+
+ if( lastNumber )
+ *lastNumber = number;
+ else
+ m_lastID.insert( prefix, new int( number ) );
+
+ return testID;
+}
+
+PMSymbol* PMSymbolTable::findNewID( const QString& prefix, PMDeclare* obj )
+{
+ QString newID = findNewID( prefix );
+ obj->setID( newID );
+
+ PMSymbol* s = new PMSymbol( newID, obj );
+// insert( newID, s );
+
+ return s;
+}