#include "KSGSArray.h" #include "../Klassen/KSGSTyp.h" #include "../Error/Error.h" #include "../Main/KSGScriptObj.h" #include "../Klassen/KSGSInt.h" #include "../Klassen/KSGSBool.h" using namespace KSGScript; // Inhalt der KSGSArrayKlasse Klasse aus KSGSArray.h // Konstruktor KSGSArrayKlasse::KSGSArrayKlasse( KSGScriptProcessor *zObj, RCArray< KSGSVariable > *std ) : KSGSKlasseInstanz( KSGS_ARRAY, 0, 0, zObj ) { val = std; } // Destruktor KSGSArrayKlasse::~KSGSArrayKlasse() { val->release(); } // nicht constant KSGSVariable *KSGSArrayKlasse::startFunktion( int id, bool access, RCArray< KSGSVariable > *parameter ) { KSGSVariable *ret = 0; switch( id ) { case 0: // void anhängen( ... ) if( parameter->getEintragAnzahl() < 1 ) error( 20, {}, obj ); val->add( parameter->get( 0 ) ); break; case 1: // void einfügen( int, ... ) if( parameter->getEintragAnzahl() < 2 ) error( 20, {}, obj ); if( parameter->z( 0 ) ) val->add( parameter->get( 1 ), parameter->z( 0 )->getInt() ); break; case 2: // void set( int, ... ) if( parameter->getEintragAnzahl() < 2 ) error( 20, {}, obj ); if( parameter->z( 0 ) ) val->set( parameter->get( 1 ), parameter->z( 0 )->getInt() ); break; case 3: // void setPosition( int, int ) if( parameter->getEintragAnzahl() < 2 ) error( 20, {}, obj ); if( parameter->z( 0 ) && parameter->z( 1 ) ) val->setPosition( parameter->z( 0 )->getInt(), parameter->z( 1 )->getInt() ); break; case 4: // void lösche( int ) if( parameter->getEintragAnzahl() < 1 ) error( 20, {}, obj ); if( parameter->z( 0 ) ) val->remove( parameter->z( 0 )->getInt() ); break; case 5: // void tausche( int, int ) if( parameter->getEintragAnzahl() < 2 ) error( 20, {}, obj ); if( parameter->z( 0 ) && parameter->z( 1 ) ) val->tausch( parameter->z( 0 )->getInt(), parameter->z( 1 )->getInt() ); break; case 6: // void leeren() val->leeren(); break; case 7: // int getEintragAnzahl() ret = new KSGSIntKlasse( obj, val->getEintragAnzahl() ); break; case 8: // ... get( int ) if( parameter->getEintragAnzahl() < 1 ) error( 20, {}, obj ); if( parameter->z( 0 ) ) ret = val->get( parameter->z( 0 )->getInt() ); break; case 9: // bool hat( int ) if( parameter->getEintragAnzahl() < 1 ) error( 20, {}, obj ); if( parameter->z( 0 ) ) ret = new KSGSBoolKlasse( obj, val->z( parameter->z( 0 )->getInt() ) != 0 ); break; } parameter->release(); return ret; } KSGSVariable *KSGSArrayKlasse::doOperator( int id, KSGSVariable *rechts ) { if( !rechts ) { error( 3, {}, obj ); return 0; } KSGSVariable *ret = 0; switch( id ) { case KSGS_O_SET: if( 1 ) { val->release(); val = rechts->getArray(); ret = dynamic_cast( getThis() ); } break; } if( !ret ) error( 21, {}, obj ); rechts->release(); return ret; } // constant RCArray< KSGSVariable > *KSGSArrayKlasse::getVal() const { return dynamic_cast*>( val->getThis() ); } RCArray< KSGSVariable > *KSGSArrayKlasse::zVal() const { return val; }