123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #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( KSGScriptObj *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 = getThis();
- }
- break;
- }
- if( !ret )
- error( 21, {}, obj );
- rechts->release();
- return ret;
- }
- // constant
- RCArray< KSGSVariable > *KSGSArrayKlasse::getVal() const
- {
- return val->getThis();
- }
- RCArray< KSGSVariable > *KSGSArrayKlasse::zVal() const
- {
- return val;
- }
- // Reference Counting
- KSGSVariable *KSGSArrayKlasse::release()
- {
- ref--;
- if( !ref )
- delete this;
- return 0;
- }
|