123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471 |
- #include "KSGSKlasse.h"
- #include "../Error/Error.h"
- #include "../Main/KSGScriptObj.h"
- #include "../Klassen/KSGSTyp.h"
- #include "../Klassen/KSGSBool.h"
- #include "../Klassen/KSGSInt.h"
- #include "../Klassen/KSGSDouble.h"
- #include "../Klassen/KSGSText.h"
- #include "../Klassen/KSGSBild.h"
- #include "../Klassen/KSGSMausEreignis.h"
- #include "../Klassen/KSGSTastaturEreignis.h"
- #include "../Klassen/KSGSTextFeld.h"
- #include "../Klassen/KSGSKnopf.h"
- #include "../Klassen/KSGSFenster.h"
- #include "../Klassen/KSGSBildZ.h"
- #include "../Klassen/KSGSAnimation2DData.h"
- #include "../Klassen/KSGSAnimation2D.h"
- #include "../Klassen/KSGSArray.h"
- using namespace KSGScript;
- // Inhalt der KSGSKlasseInstanz Klasse aus KSGSKlasse.h
- // Konstruktor
- KSGSKlasseInstanz::KSGSKlasseInstanz(int typ, Array< KSGSVariableDef* >* zVars, RCArray< KSGSFunktion >* funcs, KSGScriptProcessor* zObj)
- : ReferenceCounter()
- {
- lokaleVariablen = new RCArray< KSGSVariable >();
- varPublic = new Array< bool >();
- funktionen = funcs;
- obj = zObj;
- lokaleVariablen->add(dynamic_cast<KSGSKlasseInstanz*>(getThis()), 0);
- varPublic->set(0, 0);
- int anz = zVars ? zVars->getEintragAnzahl() : 0;
- for (int i = 0; i < anz; i++)
- {
- lokaleVariablen->set(KSGSKlasseInstanz::erstellVariable(zObj, zVars->get(i)), zVars->get(i)->id + 1);
- varPublic->set(zVars->get(i)->sichtbar == 1, zVars->get(i)->id + 1);
- }
- this->typ = typ;
- }
- // Destruktor
- KSGSKlasseInstanz::~KSGSKlasseInstanz()
- {
- lokaleVariablen->release();
- if (funktionen)
- funktionen->release();
- varPublic->release();
- }
- // nicht constant
- KSGSVariable* KSGSKlasseInstanz::startFunktion(int id, bool zugriff, RCArray< KSGSVariable >* parameter)
- {
- if (!funktionen || (!zugriff && (!funktionen->z(id) || funktionen->z(id)->getSichtbarkeit() != 1)))
- {
- error(18, {}, obj);
- parameter->release();
- return 0;
- }
- if (!funktionen->z(id))
- {
- parameter->release();
- return 0;
- }
- KSGSFunktionInstanz* inst = funktionen->z(id)->erstellInstanz(obj, dynamic_cast<KSGSKlasseInstanz*>(getThis()), parameter);
- KSGSVariable* ret = inst->startFunktion();
- inst->release();
- return ret;
- }
- KSGSVariable* KSGSKlasseInstanz::doOperator(int id, KSGSVariable* rechts)
- {
- error(21, {}, obj);
- if (rechts)
- rechts->release();
- return 0;
- }
- void KSGSKlasseInstanz::setVariable(int id, KSGSVariable* var)
- {
- lokaleVariablen->set(var, id);
- }
- // constant
- KSGSVariable* KSGSKlasseInstanz::getVariable(int id, bool zugriff) const
- {
- if (!zugriff && (!varPublic->hat(id) || !varPublic->get(id)))
- {
- error(17, {}, obj);
- return 0;
- }
- return lokaleVariablen->get(id);
- }
- KSGSVariable* KSGSKlasseInstanz::umwandelnIn(int typ) const
- {
- error(16, {}, obj);
- return 0;
- }
- int KSGSKlasseInstanz::getTyp() const
- {
- return typ;
- }
- // verarbeiten
- bool KSGSKlasseInstanz::getBool() const
- {
- if (typ == KSGS_BOOL)
- return ((KSGSBoolKlasse*)this)->getVal();
- else
- {
- KSGSBoolKlasse* tmp = (KSGSBoolKlasse*)umwandelnIn(KSGS_BOOL);
- if (tmp)
- {
- bool ret = tmp->getVal();
- tmp->release();
- return ret;
- }
- return 0;
- }
- }
- int KSGSKlasseInstanz::getInt() const
- {
- if (typ == KSGS_INT)
- return ((KSGSIntKlasse*)this)->getVal();
- else
- {
- KSGSIntKlasse* tmp = (KSGSIntKlasse*)umwandelnIn(KSGS_INT);
- if (tmp)
- {
- int ret = tmp->getVal();
- tmp->release();
- return ret;
- }
- return 0;
- }
- }
- double KSGSKlasseInstanz::getDouble() const
- {
- if (typ == KSGS_DOUBLE)
- return ((KSGSDoubleKlasse*)this)->getVal();
- else
- {
- KSGSDoubleKlasse* tmp = (KSGSDoubleKlasse*)umwandelnIn(KSGS_DOUBLE);
- if (tmp)
- {
- double ret = tmp->getVal();
- tmp->release();
- return ret;
- }
- return 0;
- }
- }
- Text* KSGSKlasseInstanz::getText() const
- {
- if (typ == KSGS_TEXT)
- return ((KSGSTextKlasse*)this)->getVal();
- else
- {
- KSGSTextKlasse* tmp = (KSGSTextKlasse*)umwandelnIn(KSGS_TEXT);
- if (tmp)
- {
- Text* ret = tmp->getVal();
- tmp->release();
- return ret;
- }
- return new Text("");
- }
- }
- Bild* KSGSKlasseInstanz::getBild() const
- {
- if (typ == KSGS_BILD)
- return ((KSGSBildKlasse*)this)->getVal();
- else
- {
- KSGSBildKlasse* tmp = (KSGSBildKlasse*)umwandelnIn(KSGS_BILD);
- if (tmp)
- {
- Bild* ret = tmp->getVal();
- tmp->release();
- return ret;
- }
- return new Bild();
- }
- }
- MausEreignis KSGSKlasseInstanz::getMausEreignis() const
- {
- if (typ == KSGS_MAUSEREIGNIS)
- return ((KSGSMausEreignisKlasse*)this)->getVal();
- else
- {
- KSGSMausEreignisKlasse* tmp = (KSGSMausEreignisKlasse*)umwandelnIn(KSGS_MAUSEREIGNIS);
- if (tmp)
- {
- MausEreignis ret = tmp->getVal();
- tmp->release();
- return ret;
- }
- return MausEreignis{ 0, 0, 0, 0, 1, 0, 0 };
- }
- }
- TastaturEreignis KSGSKlasseInstanz::getTastaturEreignis() const
- {
- if (typ == KSGS_TASTATUREREIGNIS)
- return ((KSGSTastaturEreignisKlasse*)this)->getVal();
- else
- {
- KSGSTastaturEreignisKlasse* tmp = (KSGSTastaturEreignisKlasse*)umwandelnIn(KSGS_TASTATUREREIGNIS);
- if (tmp)
- {
- TastaturEreignis ret = tmp->getVal();
- tmp->release();
- return ret;
- }
- return TastaturEreignis{ 0, 0, 0 };
- }
- }
- TextFeld* KSGSKlasseInstanz::getTextFeld() const
- {
- if (typ == KSGS_TEXTFELD)
- return ((KSGSTextFeldKlasse*)this)->getVal();
- else
- {
- KSGSTextFeldKlasse* tmp = (KSGSTextFeldKlasse*)umwandelnIn(KSGS_TEXTFELD);
- if (tmp)
- {
- TextFeld* ret = tmp->getVal();
- tmp->release();
- return ret;
- }
- return new TextFeld();
- }
- }
- Knopf* KSGSKlasseInstanz::getKnopf() const
- {
- if (typ == KSGS_KNOPF)
- return ((KSGSKnopfKlasse*)this)->getVal();
- else
- {
- KSGSKnopfKlasse* tmp = (KSGSKnopfKlasse*)umwandelnIn(KSGS_KNOPF);
- if (tmp)
- {
- Knopf* ret = tmp->getVal();
- tmp->release();
- return ret;
- }
- return new Knopf();
- }
- }
- Fenster* KSGSKlasseInstanz::getFenster() const
- {
- if (typ == KSGS_FENSTER)
- return ((KSGSFensterKlasse*)this)->getVal();
- else
- {
- KSGSFensterKlasse* tmp = (KSGSFensterKlasse*)umwandelnIn(KSGS_FENSTER);
- if (tmp)
- {
- Fenster* ret = tmp->getVal();
- tmp->release();
- return ret;
- }
- return new Fenster();
- }
- }
- BildZ* KSGSKlasseInstanz::getBildZ() const
- {
- if (typ == KSGS_BILDO)
- return ((KSGSBildZKlasse*)this)->getVal();
- else
- {
- KSGSBildZKlasse* tmp = (KSGSBildZKlasse*)umwandelnIn(KSGS_BILDO);
- if (tmp)
- {
- BildZ* ret = tmp->getVal();
- tmp->release();
- return ret;
- }
- return new BildZ();
- }
- }
- Animation2DData* KSGSKlasseInstanz::getAnimation2DData() const
- {
- if (typ == KSGS_ANIMATION2DDATA)
- return ((KSGSAnimation2DDataKlasse*)this)->getVal();
- else
- {
- KSGSAnimation2DDataKlasse* tmp = (KSGSAnimation2DDataKlasse*)umwandelnIn(KSGS_ANIMATION2DDATA);
- if (tmp)
- {
- Animation2DData* ret = tmp->getVal();
- tmp->release();
- return ret;
- }
- return new Animation2DData();
- }
- }
- Animation2D* KSGSKlasseInstanz::getAnimation2D() const
- {
- if (typ == KSGS_ANIMATION2D)
- return ((KSGSAnimation2DKlasse*)this)->getVal();
- else
- {
- KSGSAnimation2DKlasse* tmp = (KSGSAnimation2DKlasse*)umwandelnIn(KSGS_ANIMATION2D);
- if (tmp)
- {
- Animation2D* ret = tmp->getVal();
- tmp->release();
- return ret;
- }
- return new Animation2D();
- }
- }
- Zeichnung* KSGSKlasseInstanz::getZeichnung() const
- {
- switch (typ)
- {
- case KSGS_TEXTFELD:
- return ((KSGSTextFeldKlasse*)this)->zVal();
- case KSGS_KNOPF:
- return ((KSGSKnopfKlasse*)this)->zVal();
- case KSGS_FENSTER:
- return ((KSGSFensterKlasse*)this)->zVal();
- case KSGS_BILDO:
- return ((KSGSBildZKlasse*)this)->zVal();
- case KSGS_ANIMATION2D:
- return ((KSGSAnimation2DKlasse*)this)->zVal();
- }
- return 0;
- }
- RCArray< KSGSVariable >* KSGSKlasseInstanz::getArray() const
- {
- if (typ == KSGS_ARRAY)
- return ((KSGSArrayKlasse*)this)->getVal();
- else
- {
- KSGSArrayKlasse* tmp = (KSGSArrayKlasse*)umwandelnIn(KSGS_ARRAY);
- if (tmp)
- {
- RCArray< KSGSVariable >* ret = tmp->getVal();
- tmp->release();
- return ret;
- }
- return new RCArray< KSGSVariable >();
- }
- }
- // static
- KSGSVariable* KSGSKlasseInstanz::erstellVariable(KSGScriptProcessor* zObj, KSGSVariableDef* def)
- {
- if (!def)
- {
- error(0, {}, zObj);
- return 0;
- }
- if (def->typId < KSGS_TYP_MIN)
- {
- error(0, {}, zObj);
- return 0;
- }
- if (def->typId <= KSGS_TYP_MAX)
- { // Vordefinierter Typ
- switch (def->typId)
- {
- case KSGS_BOOL:
- if (def->wert.istGleich("true"))
- return new KSGSBoolKlasse(zObj, 1);
- if (def->wert.istGleich("false"))
- return new KSGSBoolKlasse(zObj, 0);
- if (def->wert.getLength())
- return new KSGSBoolKlasse(zObj, (int)def->wert != 0);
- return new KSGSBoolKlasse(zObj);
- case KSGS_INT:
- if (def->wert.getLength())
- return new KSGSIntKlasse(zObj, (int)def->wert);
- return new KSGSIntKlasse(zObj);
- case KSGS_DOUBLE:
- if (def->wert.getLength())
- return new KSGSDoubleKlasse(zObj, (double)def->wert);
- return new KSGSDoubleKlasse(zObj);
- case KSGS_TEXT:
- if (def->wert.getLength())
- return new KSGSTextKlasse(zObj, def->wert);
- return new KSGSTextKlasse(zObj);
- case KSGS_BILD:
- return new KSGSBildKlasse(zObj);
- case KSGS_MAUSEREIGNIS:
- return new KSGSMausEreignisKlasse(zObj);
- case KSGS_TASTATUREREIGNIS:
- return new KSGSTastaturEreignisKlasse(zObj);
- case KSGS_TEXTFELD:
- return new KSGSTextFeldKlasse(zObj);
- case KSGS_KNOPF:
- return new KSGSKnopfKlasse(zObj);
- case KSGS_FENSTER:
- return new KSGSFensterKlasse(zObj);
- case KSGS_BILDO:
- return new KSGSBildZKlasse(zObj);
- case KSGS_ANIMATION2DDATA:
- return new KSGSAnimation2DDataKlasse(zObj);
- case KSGS_ANIMATION2D:
- return new KSGSAnimation2DKlasse(zObj);
- default:
- error(1, {}, zObj);
- break;
- }
- return 0;
- }
- else if (zObj) // Im Script Definierter Typ
- return zObj->erstellKlassenInstanz(def->typId);
- error(0, {}, zObj);
- return 0;
- }
- // Inhalt der KSGSKlasse Klasse aus KSGSKlasse.h
- // Konstruktor
- KSGSKlasse::KSGSKlasse(int id)
- : ReferenceCounter()
- {
- var = new Array< KSGSVariableDef* >();
- funktionen = new RCArray< KSGSFunktion >();
- this->id = id;
- }
- // Destruktor
- KSGSKlasse::~KSGSKlasse()
- {
- int anz = var->getEintragAnzahl();
- for (int i = 0; i < anz; i++)
- delete var->get(i);
- var->release();
- funktionen->release();
- }
- // nicht constant
- void KSGSKlasse::addVariable(KSGSVariableDef* var)
- {
- this->var->add(var);
- }
- void KSGSKlasse::addFunktion(KSGSFunktion* func)
- {
- funktionen->add(func);
- }
- KSGSKlasseInstanz* KSGSKlasse::erstellInstanz(KSGScriptProcessor* zObj)
- {
- return new KSGSKlasseInstanz(id, var, dynamic_cast<RCArray<KSGSFunktion>*>(funktionen->getThis()), zObj);
- }
- // constant
- int KSGSKlasse::getId() const
- {
- return id;
- }
|