From 0ea5fc66924303d1bf73ba283a383e2aadee02f2 Mon Sep 17 00:00:00 2001 From: neodarz Date: Sat, 11 Aug 2018 20:21:34 +0200 Subject: Initial commit --- docs/doxygen/nel/agent_script_cpp-source.html | 1479 +++++++++++++++++++++++++ 1 file changed, 1479 insertions(+) create mode 100644 docs/doxygen/nel/agent_script_cpp-source.html (limited to 'docs/doxygen/nel/agent_script_cpp-source.html') diff --git a/docs/doxygen/nel/agent_script_cpp-source.html b/docs/doxygen/nel/agent_script_cpp-source.html new file mode 100644 index 00000000..69b6a4ef --- /dev/null +++ b/docs/doxygen/nel/agent_script_cpp-source.html @@ -0,0 +1,1479 @@ + + + + nevrax.org : docs + + + + + + + + + + + + + + +
# Home   # nevrax.com   
+ + + + +
Nevrax
+ + + + + + + + + + +
+ + +
+ Nevrax.org
+ + + + + + + +
#News
#Mailing-list
#Documentation
#CVS
#Bugs
#License
+
+ + +
+ + +
+Docs + +
+  + + + + + +
Documentation 
+ +
+Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages   Search  
+

agent_script.cpp

Go to the documentation of this file.
00001 
+00006 /* Copyright, 2000 Nevrax Ltd.
+00007  *
+00008  * This file is part of NEVRAX NEL.
+00009  * NEVRAX NEL is free software; you can redistribute it and/or modify
+00010  * it under the terms of the GNU General Public License as published by
+00011  * the Free Software Foundation; either version 2, or (at your option)
+00012  * any later version.
+00013 
+00014  * NEVRAX NEL is distributed in the hope that it will be useful, but
+00015  * WITHOUT ANY WARRANTY; without even the implied warranty of
+00016  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+00017  * General Public License for more details.
+00018 
+00019  * You should have received a copy of the GNU General Public License
+00020  * along with NEVRAX NEL; see the file COPYING. If not, write to the
+00021  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+00022  * MA 02111-1307, USA.
+00023  */
+00024 #include "nel/ai/agent/agent_script.h"
+00025 #include "nel/ai/agent/agent_manager.h"
+00026 #include "nel/ai/agent/agent_local_mailer.h"
+00027 #include "nel/ai/script/interpret_object_agent.h"
+00028 #include "nel/ai/script/codage.h"
+00029 #include "nel/ai/script/type_def.h"
+00030 #include "nel/ai/script/object_unknown.h"
+00031 #include "nel/ai/agent/agent_method_def.h"
+00032 #include "nel/ai/agent/message_script.h"
+00033 #include "nel/ai/script/interpret_object_message.h"
+00034 #include "nel/ai/script/interpret_object_agent.h"
+00035 #include "nel/ai/agent/agent_nombre.h"
+00036 #include "nel/ai/agent/performative.h"
+00037 #include "nel/ai/agent/msg_notify.h"
+00038 #include "nel/ai/agent/msg_goal.h"
+00039 #include "nel/ai/logic/factbase.h"
+00040 #include "nel/ai/logic/goal.h"
+00041 #include "nel/ai/agent/key_agent.h"
+00042 #include "nel/ai/agent/list_manager.h"
+00043 
+00044 
+00045 
+00046 namespace NLAIAGENT
+00047 {       
+00048         static CGroupType listBidon;
+00049 
+00050         static NLAISCRIPT::COperandSimpleListOr *msgType;
+00051         static NLAISCRIPT::COperandSimpleListOr *msgPerf;
+00052         static NLAISCRIPT::CParam *SendParamMessageScript;
+00053         static NLAISCRIPT::CParam *SendCompParamMessageScript;
+00054         static NLAISCRIPT::COperandSimple *IdMsgNotifyParentClass;
+00055         static NLAISCRIPT::COperandSimpleListOr *IdMsgNotifyParent;
+00056         static NLAISCRIPT::CParam *ParamRunParentNotify;
+00057         CAgentScript::CMethodCall **CAgentScript::StaticMethod = NULL;
+00058 
+00061         static NLAISCRIPT::COperandSimple *IdGoalMsgClass;
+00062         static NLAISCRIPT::COperandSimpleListOr *IdGoalMsg;
+00063         static NLAISCRIPT::CParam *ParamGoalMsg;
+00065 
+00066         void CAgentScript::initAgentScript()
+00067         {
+00068                 
+00069                 msgType = new NLAISCRIPT::COperandSimpleListOr(3,       
+00070                                                                                                                 new NLAIC::CIdentType(CMessageList::IdMessage),
+00071                                                                                                                 new NLAIC::CIdentType(CMessageVector::IdMessageVector),
+00072                                                                                                                 new NLAIC::CIdentType(NLAISCRIPT::CMessageClass::IdMessageClass));
+00073 
+00074                 msgPerf = new NLAISCRIPT::COperandSimpleListOr(7,       
+00075                                                                                                                 new NLAIC::CIdentType(CPExec::IdPExec),
+00076                                                                                                                 new NLAIC::CIdentType(CPAchieve::IdPAchieve),
+00077                                                                                                                 new NLAIC::CIdentType(CPAsk::IdPAsk),
+00078                                                                                                                 new NLAIC::CIdentType(CPBreak::IdPBreak),
+00079                                                                                                                 new NLAIC::CIdentType(CPTell::IdPTell),
+00080                                                                                                                 new NLAIC::CIdentType(CPKill::IdPKill),
+00081                                                                                                                 new NLAIC::CIdentType(CPError::IdPError));
+00082 
+00083 
+00084                 SendParamMessageScript = new NLAISCRIPT::CParam(2,msgPerf, msgType);
+00085 
+00086                 msgPerf->incRef();
+00087                 msgType->incRef();
+00088 
+00089                 SendCompParamMessageScript = new NLAISCRIPT::CParam(3,new NLAISCRIPT::COperandSimple(new NLAIC::CIdentType(CStringType::IdStringType)),
+00090                                                                                                                 msgPerf, msgType);
+00091 
+00092                 IdMsgNotifyParentClass = new NLAISCRIPT::COperandSimple(new NLAIC::CIdentType(NLAISCRIPT::CMsgNotifyParentClass::IdMsgNotifyParentClass));
+00093 
+00094                 IdMsgNotifyParent = new NLAISCRIPT::COperandSimpleListOr(2,
+00095                                                                                                                                 new NLAIC::CIdentType(NLAISCRIPT::CMsgNotifyParentClass::IdMsgNotifyParentClass),
+00096                                                                                                                                 new NLAIC::CIdentType(CNotifyParentScript::IdNotifyParentScript));
+00097 
+00098                 ParamRunParentNotify = new NLAISCRIPT::CParam(1,IdMsgNotifyParent);
+00099 
+00101         // Temp, to be transfered in CGDAgentScript (Goal Driven Agent)
+00102 
+00103                 IdGoalMsgClass = new NLAISCRIPT::COperandSimple(new NLAIC::CIdentType(NLAISCRIPT::CGoalMsgClass::IdGoalMsgClass));
+00104 
+00105                 IdGoalMsg = new NLAISCRIPT::COperandSimpleListOr(2,
+00106                                                                                                                 new NLAIC::CIdentType(NLAISCRIPT::CGoalMsgClass::IdGoalMsgClass),
+00107                                                                                                                 new NLAIC::CIdentType(CGoalMsg::IdGoalMsg));
+00108 
+00109                 ParamGoalMsg = new NLAISCRIPT::CParam(1,IdGoalMsg);
+00111 
+00112 
+00113 
+00114                 StaticMethod = new CAgentScript::CMethodCall *[CAgentScript::TLastM];
+00115 
+00116                 StaticMethod[CAgentScript::TRunAskParentNotify] = new CAgentScript::CMethodCall(        _RUNASK_, 
+00117                                                                                                                                                                                 CAgentScript::TRunAskParentNotify, ParamRunParentNotify,
+00118                                                                                                                                                                                 CAgentScript::CheckAll,
+00119                                                                                                                                                                                 1,
+00120                                                                                                                                                                                 new NLAISCRIPT::CObjectUnknown(IdMsgNotifyParentClass));
+00121 
+00122                 IdMsgNotifyParentClass->incRef();
+00123                 StaticMethod[CAgentScript::TRunTellParentNotify] = new CAgentScript::CMethodCall(       _RUNTEL_, 
+00124                                                                                                                                                                                 CAgentScript::TRunTellParentNotify, ParamRunParentNotify,
+00125                                                                                                                                                                                 CAgentScript::CheckAll,
+00126                                                                                                                                                                                 1,
+00127                                                                                                                                                                                 new NLAISCRIPT::CObjectUnknown(IdMsgNotifyParentClass));
+00128 
+00129                 StaticMethod[CAgentScript::TSend] = new CAgentScript::CMethodCall(      _SEND_, 
+00130                                                                                                                                                 CAgentScript::TSend, SendParamMessageScript,
+00131                                                                                                                                                 CAgentScript::CheckAll,
+00132                                                                                                                                                 2,
+00133                                                                                                                                                 new NLAISCRIPT::CObjectUnknown(new NLAISCRIPT::COperandVoid));
+00134 
+00135                 StaticMethod[CAgentScript::TSendComponent] = new CAgentScript::CMethodCall(     _SEND_, 
+00136                                                                                                                                                 CAgentScript::TSendComponent, 
+00137                                                                                                                                                 SendCompParamMessageScript,CAgentScript::CheckAll,
+00138                                                                                                                                                 3,
+00139                                                                                                                                                 new NLAISCRIPT::CObjectUnknown(new NLAISCRIPT::COperandVoid));
+00140 
+00141                 StaticMethod[CAgentScript::TGetChildTag] = new CAgentScript::CMethodCall(       _GETCHILD_,
+00142                                                                                                                                                                 CAgentScript::TGetChildTag, 
+00143                                                                                                                                                                 NULL,
+00144                                                                                                                                                                 CAgentScript::CheckCount,
+00145                                                                                                                                                                 1,
+00146                                                                                                                                                                 new NLAISCRIPT::CObjectUnknown(new 
+00147                                                                                                                                                                 NLAISCRIPT::COperandSimple(
+00148                                                                                                                                                                 new NLAIC::CIdentType(CVectorGroupManager::IdVectorGroupManager))));
+00149                 StaticMethod[CAgentScript::TAddChildTag] = new CAgentScript::CMethodCall(       _ADDCHILD_, 
+00150                                                                                                                                                                                 CAgentScript::TAddChildTag, 
+00151                                                                                                                                                                                 NULL,CAgentScript::CheckCount,
+00152                                                                                                                                                                                 2,
+00153                                                                                                                                                                                 new NLAISCRIPT::CObjectUnknown(
+00154                                                                                                                                                                                 new NLAISCRIPT::COperandSimple(
+00155                                                                                                                                                                                 new NLAIC::CIdentType(DigitalType::IdDigitalType))));
+00156 
+00157                 StaticMethod[CAgentScript::TFather] = new CAgentScript::CMethodCall(    _FATHER_, 
+00158                                                                                                                                                         CAgentScript::TFather, 
+00159                                                                                                                                                         NULL,CAgentScript::CheckCount,
+00160                                                                                                                                                         0,
+00161                                                                                                                                                         new NLAISCRIPT::CObjectUnknown(
+00162                                                                                                                                                         new NLAISCRIPT::COperandSimple(
+00163                                                                                                                                                         new NLAIC::CIdentType(CAgentScript::IdAgentScript))));
+00164 
+00166         // Temp, to be transfered in CGDAgentScript (Goal Driven Agent)
+00167 
+00168                 StaticMethod[CAgentScript::TGoal] = new CAgentScript::CMethodCall(      _RUNACHIEVE_, 
+00169                                                                                                                                                         CAgentScript::TGoal, ParamGoalMsg,
+00170                                                                                                                                                         CAgentScript::CheckAll,
+00171                                                                                                                                                         1,
+00172                                                                                                                                                         new NLAISCRIPT::CObjectUnknown(IdGoalMsgClass) );
+00174 
+00175 
+00176 
+00177                 StaticMethod[CAgentScript::TSelf] = new CAgentScript::CMethodCall(      _SELF_, 
+00178                                                                                                                                                 CAgentScript::TSelf, 
+00179                                                                                                                                                 NULL,CAgentScript::CheckCount,
+00180                                                                                                                                                 0,
+00181                                                                                                                                                 new NLAISCRIPT::CObjectUnknown( new NLAISCRIPT::COperandSimple(
+00182                                                                                                                                                 new NLAIC::CIdentType(CAgentScript::IdAgentScript))));
+00183 
+00184                 StaticMethod[CAgentScript::TGetName] = new CAgentScript::CMethodCall(   _GETNAME_, 
+00185                                                                                                                                                         CAgentScript::TGetName, 
+00186                                                                                                                                                         NULL,CAgentScript::CheckCount,
+00187                                                                                                                                                         1,
+00188                                                                                                                                                         new NLAISCRIPT::CObjectUnknown(
+00189                                                                                                                                                         new NLAISCRIPT::COperandSimple(
+00190                                                                                                                                                         new NLAIC::CIdentType(CStringType::IdStringType))));
+00191 
+00192                 StaticMethod[CAgentScript::TRemoveChild] = new CAgentScript::CMethodCall(       _REMOVECHILD_, 
+00193                                                                                                                                                                 CAgentScript::TRemoveChild, 
+00194                                                                                                                                                                 NULL,CAgentScript::CheckCount,
+00195                                                                                                                                                                 0,
+00196                                                                                                                                                                 new NLAISCRIPT::CObjectUnknown(
+00197                                                                                                                                                                 new NLAISCRIPT::COperandSimple(
+00198                                                                                                                                                                 new NLAIC::CIdentType(DigitalType::IdDigitalType))));
+00199 
+00200                 
+00201         }
+00202 
+00203         void CAgentScript::releaseAgentScript()
+00204         {               
+00205                 SendParamMessageScript->release();
+00206                 //IdMsgNotifyParentClass->release();            
+00208         // Temp, to be transfered in CGDAgentScript (Goal Driven Agent)
+00209 //              IdGoalMsgClass->release();
+00210 //              IdGoalMsg->release();
+00211                 ParamGoalMsg->release();
+00213 
+00214                 ParamRunParentNotify->release();
+00215                 SendCompParamMessageScript->release();
+00216                 sint i;
+00217                 for(i = 0; i < CAgentScript::TLastM; i++)
+00218                                 delete StaticMethod[i];
+00219                 delete StaticMethod;
+00220         }
+00221 
+00222         /*CAgentScript::CMethodCall CAgentScript::StaticMethod[] = 
+00223         {                               
+00224                 
+00225 
+00226                 CAgentScript::CMethodCall(      _ADDCHILD_, 
+00227                                                                         CAgentScript::TAddChildTag, 
+00228                                                                         NULL,CAgentScript::CheckCount,
+00229                                                                         2,
+00230                                                                         new NLAISCRIPT::CObjectUnknown(new NLAISCRIPT::COperandSimple(new NLAIC::CIdentType(DigitalType::IdDigitalType)))),
+00231 
+00232                 CAgentScript::CMethodCall(      _FATHER_, 
+00233                                                                         CAgentScript::TFather, 
+00234                                                                         NULL,CAgentScript::CheckCount,
+00235                                                                         0,
+00236                                                                         new NLAISCRIPT::CObjectUnknown(new NLAISCRIPT::COperandSimple(new NLAIC::CIdentType(CAgentScript::IdAgentScript)))),
+00237 
+00238                 CAgentScript::CMethodCall(      _SELF_, 
+00239                                                                         CAgentScript::TSelf, 
+00240                                                                         NULL,CAgentScript::CheckCount,
+00241                                                                         0,
+00242                                                                         new NLAISCRIPT::CObjectUnknown(new NLAISCRIPT::COperandSimple(new NLAIC::CIdentType(CAgentScript::IdAgentScript)))),
+00243 
+00244                 CAgentScript::CMethodCall(      _GETNAME_, 
+00245                                                                         CAgentScript::TGetName, 
+00246                                                                         NULL,CAgentScript::CheckCount,
+00247                                                                         1,
+00248                                                                         new NLAISCRIPT::CObjectUnknown(new NLAISCRIPT::COperandSimple(new NLAIC::CIdentType(CAgentScript::IdAgentScript)))),
+00249 
+00250                 CAgentScript::CMethodCall(      _REMOVECHILD_, 
+00251                                                                         CAgentScript::TRemoveChild, 
+00252                                                                         NULL,CAgentScript::CheckCount,
+00253                                                                         0,
+00254                                                                         new NLAISCRIPT::CObjectUnknown(new NLAISCRIPT::COperandSimple(new NLAIC::CIdentType(DigitalType::IdDigitalType))))
+00255 
+00256         };*/
+00257 
+00258         CAgentScript::CAgentScript(const CAgentScript &a): IAgentManager(a)
+00259         {
+00260                 if ( a._AgentClass )
+00261                 {
+00262                         _AgentClass = a._AgentClass;
+00263                         a._AgentClass->incRef();
+00264                 }
+00265 
+00266                 _NbComponents = a._NbComponents;
+00267                 _Components = new IObjectIA *[ _NbComponents ];
+00268                 //sint32 nb_scripted = 0;
+00269                 for ( int i = 0; i < _NbComponents; i++ )
+00270                 {
+00271                         _Components[i] = (IObjectIA *)a._Components[i]->clone();                
+00272 
+00273                         if(((const NLAIC::CTypeOfObject &)_Components[i]->getType()) & NLAIC::CTypeOfObject::tAgentInterpret)
+00274                         {
+00276                                 ((CAgentScript *)_Components[i])->setParent( (const IWordNumRef *) *this);
+00277                                 //( (CScriptMailBox *) ((CAgentScript *)_Components[i])->getLocalMailBox() )->setIndex(nb_scripted);
+00278                                 //nb_scripted++;
+00279                         }
+00280                 }
+00281 
+00282                 /*if(   a._ScriptMail) 
+00283                 {
+00284                         _ScriptMail = (IMailBox *)a._ScriptMail->clone();
+00285                         _ScriptMail->setParent( (const IWordNumRef *) *this );
+00286                 }
+00287                 else 
+00288                 {
+00289                         _ScriptMail = new CScriptMailBox((const IWordNumRef *) *this);
+00290                 }*/
+00291                 
+00292                 _AgentManager = a._AgentManager;
+00293                 //if(_AgentManager) _AgentManager->incRef();
+00294 
+00295                 std::vector<NLAILOGIC::IBaseOperator *>::const_iterator it_o = a._Operators.begin();
+00296                 while ( it_o != a._Operators.end() )
+00297                 {
+00298                         addOperator( *it_o );
+00299                         it_o++;
+00300                 }
+00301         }
+00302         
+00303         CAgentScript::CAgentScript(IAgentManager *manager) : IAgentManager( NULL ), _AgentClass( NULL )
+00304         {
+00305                 _Components = NULL;
+00306                 _NbComponents = 0;              
+00307                 _AgentManager = manager;
+00308                 //MangerIsReferenced = false;
+00309                 //_ScriptMail = new CScriptMailBox((const IWordNumRef *) *this);
+00310         }
+00311 
+00312         CAgentScript::CAgentScript(IAgentManager *manager, IBasicAgent *father,//The agent's father 
+00313                                                           std::list<IObjectIA *> &components,   //Static components                                                       
+00314                                                           NLAISCRIPT::CAgentClass *agent_class )        //Class
+00315         
+00316         : IAgentManager(father), _AgentClass( agent_class )
+00317         {       
+00318                 if ( _AgentClass )
+00319                         _AgentClass->incRef();
+00320 
+00321                 // Creates the static components array
+00322                 _NbComponents = components.size();
+00323                 _Components = new IObjectIA *[ _NbComponents ];
+00324                 std::list<IObjectIA *>::iterator it_c = components.begin();
+00325                 int id_c = 0;
+00326                 //sint32 nb_scripted = 0;
+00327                 _AgentManager = manager;
+00328                 while ( it_c != components.end() )
+00329                 {
+00330                         IObjectIA *o = (IObjectIA *)*it_c;
+00331                         _Components[id_c] = o;
+00332 
+00333                         if(((const NLAIC::CTypeOfObject &)o->getType()) & NLAIC::CTypeOfObject::tAgentInterpret)
+00334                         {
+00335                                 ((CAgentScript *)o)->setParent( (const IWordNumRef *) *this);
+00336                                 //( (CScriptMailBox *) ((CAgentScript *)_Components[id_c])->getLocalMailBox() )->setIndex( nb_scripted );
+00337                                 //nb_scripted++;
+00338                         }
+00339 
+00340                         it_c++;
+00341                         id_c++;
+00342                 }               
+00343                 //_ScriptMail = new CScriptMailBox( (const IWordNumRef *) *this);
+00344                 
+00345         }       
+00346 
+00347         CAgentScript::~CAgentScript()
+00348         {
+00349                 if ( _AgentClass )
+00350                         _AgentClass->release();
+00351 
+00352                 // destruction of static components
+00353                 for ( int i = 0; i < _NbComponents; i++ )
+00354                         _Components[i]->release();
+00355                 delete[] _Components;
+00356                 
+00357                 //if(_AgentManager != NULL) _AgentManager->release();
+00358                 
+00359                 //if ( _ScriptMail != NULL )    _ScriptMail->release();
+00360         }
+00361 
+00362         void CAgentScript::setAgentManager(IAgentManager *manager)
+00363         {
+00364                 //if(_AgentManager != NULL) _AgentManager->release();
+00365                 _AgentManager = manager;
+00366                 for ( int i = 0; i < _NbComponents; i++ )
+00367                 {
+00368                         if(((const NLAIC::CTypeOfObject &)_Components[i]->getType()) & NLAIC::CTypeOfObject::tAgentInterpret)
+00369                         {
+00370                                 //_AgentManager->incRef();
+00371                                 ((CAgentScript *)_Components[i])->setAgentManager(_AgentManager);
+00372                         }
+00373                 }
+00374                         
+00375         }
+00376 
+00377         sint32 CAgentScript::getChildMessageIndex(const IMessageBase *msg, sint32 child_index )
+00378         {
+00379                 return _AgentClass->getChildMessageIndex( msg, child_index );
+00380         }
+00381 
+00382         void CAgentScript::setStaticMember(sint32 index,IObjectIA *op)
+00383         {
+00384 #ifdef NL_DEBUG
+00385                 if ( index >= _NbComponents )
+00386                 {
+00387                         throw NLAIE::CExceptionIndexError();
+00388                 }
+00389 #endif
+00390                 _Components[ index ]->release();
+00391                 _Components[ index ] = op;
+00392 
+00393 
+00394                 if(((const NLAIC::CTypeOfObject &) op->getType()) & NLAIC::CTypeOfObject::tAgentInterpret)
+00395                 {
+00396                         ((CAgentScript *)op)->setParent( (const IWordNumRef *) *this);
+00397                         //( (CScriptMailBox *) ((CAgentScript *)op)->getLocalMailBox() )->setIndex( index );
+00398                 }
+00399         }
+00400 
+00401         sint32 CAgentScript::getStaticMemberSize() const
+00402         {
+00403                 return _AgentClass->getStaticMemberSize();
+00404         }
+00405 
+00406         
+00407         const IObjectIA *CAgentScript::getStaticMember(sint32 index) const
+00408         {
+00409 #ifdef NL_DEBUG
+00410                 if ( index >= _NbComponents )
+00411                 {
+00412                         throw NLAIE::CExceptionIndexError();
+00413                 }
+00414 #endif
+00415                 return _Components[ index ];
+00416         }
+00417 
+00418         NLAISCRIPT::IOpCode *CAgentScript::getMethode(sint32 inheritance,sint32 index)
+00419         {
+00420 #ifdef NL_DEBUG
+00421                 if ( index >= _AgentClass->getMethodIndexSize())
+00422                 {
+00423                         throw NLAIE::CExceptionIndexError();
+00424                 }
+00425 
+00426                 if ( inheritance >= _AgentClass->sizeVTable())
+00427                 {
+00428                         throw NLAIE::CExceptionIndexError();
+00429                 }
+00430 #endif
+00431                 return (NLAISCRIPT::IOpCode *)_AgentClass->getBrancheCode(inheritance,index).getCode();
+00432         }
+00433 
+00434         NLAISCRIPT::IOpCode *CAgentScript::getMethode(sint32 index)
+00435         {
+00436 #ifdef NL_DEBUG         
+00437                 const char *dbg_class_name = (const char *) getType();
+00438                 const char *dbg_base_class_name = (const char *) _AgentClass->getType();
+00439 
+00440                 if ( index >= _AgentClass->getMethodIndexSize())
+00441                 {
+00442                         throw NLAIE::CExceptionIndexError();
+00443                 }
+00444 #endif
+00445                 return (NLAISCRIPT::IOpCode *)_AgentClass->getBrancheCode(index).getCode();
+00446         }
+00447 
+00448         void CAgentScript::save(NLMISC::IStream &os)
+00449         {
+00450                 IBasicAgent::save(os);
+00451                 sint32 size = _NbComponents;
+00452                 os.serial( size );
+00453                 for ( int i = 0; i < _NbComponents; i++ )
+00454                 {
+00455                         os.serial( (NLAIC::CIdentType &) _Components[i]->getType() );
+00456                         _Components[i]->save(os);
+00457                 }               
+00458         }       
+00459 
+00460         void CAgentScript::load(NLMISC::IStream &is)
+00461         {
+00462                 IBasicAgent::load(is);
+00463                 
+00464                 // Loads static components
+00465                 sint32 size;
+00466                 is.serial( size );
+00467                 _NbComponents = size;
+00468 
+00469                 if(_Components)
+00470                 {
+00471                         for ( int i = 0; i < _NbComponents; i++ )
+00472                                                         _Components[i]->release();
+00473                         delete[] _Components;
+00474                 }
+00475                 _Components = new IObjectIA *[ _NbComponents ];
+00476 
+00477                 for ( int i = 0; i < _NbComponents; i++ )
+00478                 {
+00479                         NLAIC::CIdentTypeAlloc id;
+00480                         is.serial( id );
+00481                         IObjectIA *tmp_c = (IObjectIA *)id.allocClass();
+00482                         tmp_c->load(is);
+00483                         _Components[i] = tmp_c;
+00484                 }
+00485         }
+00486 
+00487         sint32 CAgentScript::getMethodIndexSize() const
+00488         {
+00489                 return _AgentClass->getMethodIndexSize();
+00490         }
+00491 
+00492         const NLAIC::IBasicType *CAgentScript::clone() const
+00493         {               
+00494                 CAgentScript *result = new CAgentScript(*this);
+00495                 return result;
+00496         }
+00497 
+00498         const NLAIC::IBasicType *CAgentScript::newInstance() const
+00499         {
+00500                 CAgentScript *instance;
+00501                 if ( _AgentClass )
+00502                 {
+00503                         instance = (CAgentScript *) _AgentClass->buildNewInstance();
+00504                 }
+00505                 else 
+00506                 {                       
+00507                         instance = new CAgentScript(NULL);
+00508                 }
+00509                 return instance;
+00510         }
+00511 
+00512         void CAgentScript::getDebugString(char *t) const
+00513         {               
+00514                 sprintf(t,"class type <%s> ",(const char *)getType());
+00515                 if ( _AgentClass )
+00516                         sprintf(&t[strlen(t)],"<%s> (scripted)  -StaticComponents:\n",(const char *)_AgentClass->getType());
+00517                 else
+00518                         sprintf(&t[strlen(t)],"<undefined_class> (scripted) -StaticComponents:\n");
+00519 
+00520                 char buf[1024*8];
+00521                 for (int i = 0; i < _NbComponents; i++ )
+00522                 {
+00523                         strcat(t, "\t\t");
+00524                         if ( _AgentClass->getComponentName(i) )
+00525                         {
+00526                                 strcat(t, _AgentClass->getComponentName(i) );
+00527                         }
+00528                         else
+00529                                 strcat(t, "<unnamed>");
+00530 
+00531                         strcat(t, "\t\t");
+00532                         _Components[i]->getDebugString(buf);
+00533                         strcat(t, "[ ");
+00534                         strcat(t, buf);
+00535                         strcat(t, " ]");
+00536                         if(i != (_NbComponents-1)) strcat(t, "\n");
+00537                 }
+00538         }
+00539 
+00540         bool CAgentScript::isEqual(const IBasicObjectIA &a) const
+00541         {
+00542                 return false;
+00543         }
+00544 
+00545         void CAgentScript::onKill(IConnectIA *a)
+00546         {
+00547                 //eraseFromList<IBasicAgent *>(&_AgentList,(IBasicAgent *)a);           
+00548                 IAgent::onKill(a);
+00549         }
+00550 
+00551         IObjectIA::CProcessResult CAgentScript::getDynamicAgent(IBaseGroupType *g)
+00552         {               
+00553                 CStringType *s = (CStringType *)g->get();
+00554                 //tsetDefNameAgent::iterator i = _DynamicAgentName.find(*s);
+00555                 IObjectIA::CProcessResult r;
+00556                 r.ResultState = IObjectIA::ProcessIdle;
+00557 
+00558                 std::pair<tsetDefNameAgent::iterator,tsetDefNameAgent::iterator>  p = _DynamicAgentName.equal_range(CKeyAgent(*s));
+00559                 if(p.first != p.second)
+00560                 {                       
+00561                         sint size = _DynamicAgentName.count(CKeyAgent(*s));
+00562                         sint n = 0;
+00563                         CVectorGroupManager *x;
+00564                         while(p.first != p.second)
+00565                         {
+00566                                 x = new CVectorGroupManager(size);
+00567                                 x->set(n++, *p.first->Itr);
+00568                                 p.first++;
+00569                         }
+00570 
+00571                         r.Result = x;
+00572                         r.Result->incRef();
+00573                         return r;
+00574                         
+00575                 }
+00576                 r.Result = &DigitalType::NullOperator;
+00577                 r.Result->incRef();
+00578                 return r;
+00579         }
+00580 
+00581         IObjectIA::CProcessResult CAgentScript::runAskParentNotify(IBaseGroupType *g)
+00582         {
+00583                 CNotifyParentScript *m = new CNotifyParentScript((IBasicAgent *)getParent());
+00584                 m->setPerformatif(IMessageBase::PTell);
+00585                 this->incRef();
+00586                 m->setSender(this);
+00587                 IObjectIA::CProcessResult r;
+00588                 r.Result = m;
+00589                 return r;
+00590         }
+00591 
+00592         IObjectIA::CProcessResult CAgentScript::runTellParentNotify(IBaseGroupType *g)
+00593         {       
+00594                 sint i;
+00595 
+00596                 CNotifyParentScript *m = new CNotifyParentScript(this);
+00597                 m->setPerformatif(IMessageBase::PTell);
+00598                 this->incRef();
+00599                 m->setSender(this);
+00600 
+00601                 for(i = 0; i < _NbComponents; i++)
+00602                 {
+00603                         if(_Components[i] != NULL)
+00604                         {                               
+00605                                 CNotifyParentScript *msg = (CNotifyParentScript *)m->clone();
+00606                                 try
+00607                                 {
+00608                                         _Components[i]->sendMessage(msg);                                       
+00609                                 }
+00610                                 catch(NLAIE::IException &)
+00611                                 {
+00612                                         msg->release();
+00613                                 }
+00614                         }
+00615                 }
+00616                 IObjectIA::CProcessResult r;
+00617                 r.Result = m;
+00618                 return r;
+00619         }
+00620 
+00621         IObjectIA::CProcessResult CAgentScript::addDynamicAgent(IBaseGroupType *g)
+00622         {
+00623                 CIteratorContener i = g->getIterator();
+00624                 CStringType &s = (CStringType &)*i++;
+00625                 IBasicAgent *o = (IBasicAgent *)i++;
+00626 
+00627                 IObjectIA::CProcessResult r;
+00628                 r.ResultState = IObjectIA::ProcessIdle;
+00629                 
+00630                 o->setParent( (const IWordNumRef *) *this );
+00631                 CNotifyParentScript *m = new CNotifyParentScript(this);
+00632                 this->incRef();
+00633                 m->setSender(this);
+00634                 m->setPerformatif(IMessageBase::PTell);
+00635                 ((IObjectIA *)o)->sendMessage(m);
+00636 
+00637                 _DynamicAgentName.insert(CKeyAgent(s,addChild(o)));
+00638                 
+00639                 r.Result = NULL;
+00640 
+00641                 return r;
+00642         }
+00643 
+00644         IObjectIA::CProcessResult CAgentScript::getDynamicName(NLAIAGENT::IBaseGroupType *g)
+00645         {       
+00646 #ifdef NL_DEBUG
+00647         char txt[1024*8];
+00648         g->getDebugString(txt);
+00649 #endif
+00650 
+00651                 IObjectIA::CProcessResult r;
+00652                 const IObjectIA *o = ((CLocalAgentMail *)g->get())->getHost();
+00653                 tsetDefNameAgent::iterator i = _DynamicAgentName.begin();
+00654 
+00655                 while(i != _DynamicAgentName.end())
+00656                 {
+00657                         CKeyAgent key = *i;
+00658                         if( o == *key.Itr )
+00659                         {
+00660                                 CStringType *s = new CStringType(key.Name);
+00661                                 r.Result = s;
+00662                                 return r;
+00663                         }
+00664                         i ++;
+00665                 }
+00666                 r.Result = new CStringType(CStringVarName("Unknown"));
+00667                 return r;
+00668         }
+00669         IObjectIA::CProcessResult CAgentScript::removeDynamic(NLAIAGENT::IBaseGroupType *g)
+00670         {
+00671                 CStringType *s = (CStringType *)g->get();
+00672                 tsetDefNameAgent::iterator i = _DynamicAgentName.find(CKeyAgent(*s));
+00673                 IObjectIA::CProcessResult r;
+00674                 r.ResultState = IObjectIA::ProcessIdle;
+00675 
+00676                 if(i != _DynamicAgentName.end())
+00677                 {                       
+00678                         //removeChild((*i).second);
+00679                         //r.Result = new DigitalType(1.0);
+00680                         //return r;
+00681                         throw;
+00682                 }               
+00683                 r.Result = &DigitalType::NullOperator;
+00684                 r.Result->incRef();
+00685                 return r;
+00686         }
+00687 
+00688         IObjectIA::CProcessResult CAgentScript::sendMethod(IObjectIA *param)
+00689         {
+00690                 INombreDefine *p = (INombreDefine *)((IBaseGroupType *)param)->popFront();
+00691                 IMessageBase *msg = (IMessageBase *)((IBaseGroupType *)param)->popFront();
+00692                 msg->setPerformatif((IMessageBase::TPerformatif)(sint)p->getNumber());
+00693                 p->release();
+00694                 return sendMessage(msg);
+00695         }
+00696 
+00697         IObjectIA::CProcessResult CAgentScript::sendMethodCompoment(IObjectIA *param)
+00698         {
+00699                 IMessageBase *msg = (IMessageBase *)((IBaseGroupType *)param)->pop();           
+00700                 return sendMessage(msg);
+00701         }
+00702 
+00703         IObjectIA::CProcessResult CAgentScript::sendMessage(const IVarName &compName,IObjectIA *msg)
+00704         {
+00705                 IObjectIA *comp = (IObjectIA *)getStaticMember(getStaticMemberIndex(compName));
+00706                 if(comp != NULL)
+00707                 {
+00708                         comp->sendMessage(msg);
+00709                 }
+00710                 return IObjectIA::CProcessResult();
+00711         }
+00712 
+00713         IObjectIA::CProcessResult CAgentScript::sendMessage(IObjectIA *m)
+00714         {
+00715 #ifdef NL_DEBUG
+00716         const char *txt = (const char *)m->getType();
+00717 #endif
+00718                 IMessageBase *msg = (IMessageBase *)m;
+00719                 this->incRef();
+00720                 msg->setReceiver(this);
+00721                 //if(msg->getMethodIndex() < 0)
+00722                 {
+00723                 /*      _ScriptMail->addMessage(msg);                   
+00724                 }               
+00725                 else 
+00726                 {*/
+00727                         if( ((const NLAIC::CTypeOfObject &)m->getType()) & NLAIC::CTypeOfObject::tAgentInterpret)
+00728                         {
+00729                                 char runMsg[1024];
+00730                                 strcpy(runMsg,_RUN_);
+00731                                 switch(msg->getPerformatif())
+00732                                 {
+00733                                 case IMessageBase::PExec:
+00734                                         strcat(runMsg,"Exec");
+00735                                         break;
+00736                                 case IMessageBase::PAchieve:
+00737                                         strcat(runMsg,"Achieve");
+00738                                         break;
+00739                                 case IMessageBase::PAsk:
+00740                                         strcat(runMsg,"Ask");
+00741                                         break;
+00742                                 case IMessageBase::PTell:
+00743                                         strcat(runMsg,"Tell");
+00744                                         break;
+00745                                 case IMessageBase::PBreak:
+00746                                         strcat(runMsg,"Break");
+00747                                         break;
+00748                                 case IMessageBase::PKill:
+00749                                         strcat(runMsg,"Kill");
+00750                                         break;
+00751                                 case IMessageBase::PError:
+00752                                         strcat(runMsg,"Error");
+00753                                         break;
+00754                                 }
+00755 
+00756                                 NLAISCRIPT::COperandSimple *t = new NLAISCRIPT::COperandSimple(new NLAIC::CIdentType(m->getType()));
+00757                                 NLAISCRIPT::CParam p(1,t);
+00758 
+00759                                 CStringVarName tmp_name = CStringVarName(runMsg);
+00760                                 tQueue r = isMember(NULL,&tmp_name,p);
+00761                                 if(r.size())
+00762                                 {
+00763                                         NLAIAGENT::CIdMethod m = r.top();
+00764                                         msg->setMethodIndex(0,m.Index);
+00765                                         //_ScriptMail->addMessage(msg);
+00766                                 }
+00767                                 //else return IAgent::sendMessage(msg);
+00768                         }
+00769                         //else return IAgent::sendMessage(msg);                 
+00770                 }
+00771                 return IAgent::sendMessage(msg);
+00772                 //return IObjectIA::CProcessResult();
+00773         }
+00774 
+00775         void CAgentScript::runChildren()
+00776         {
+00777 #ifdef NL_DEBUG 
+00778         const char *classBase = (const char *)getType();
+00779 #endif
+00780                 // Activation des agents de la partie statique
+00781                 for ( int i = 0; i < _NbComponents; i++ )
+00782                 {
+00783                         IObjectIA *o = _Components[i];
+00784                         o->run();
+00785                 }
+00786 
+00787                 // Activation des fils
+00788                 IAgent::runChildren();
+00789         }
+00790 
+00791         void CAgentScript::processMessages(IMessageBase *msg,IObjectIA *c)
+00792         {
+00793 #ifdef NL_DEBUG
+00794         const char *txt = (const char *)msg->getType();
+00795 #endif
+00796                 NLAISCRIPT::CCodeContext &context = (NLAISCRIPT::CCodeContext &)*c;
+00797                 IBaseGroupType *param = new CGroupType();
+00798                 msg->incRef();
+00799                 param->push(msg);
+00800                 context.Stack ++;
+00801                 context.Stack[(int)context.Stack] = param;
+00802                 
+00803                 int indexM = msg->getMethodIndex() - getBaseMethodCount();
+00804                 if(indexM >= 0)
+00805                 {
+00806                         IObjectIA *code = getMethode(indexM);
+00807                         if(code == NULL)
+00808                         {
+00809                                 getMail()->popMessage();
+00810                                 return;
+00811                         }
+00812                 }
+00813 
+00814                 NLAISCRIPT::IMethodContext *methodContex;                               
+00815 
+00816                 if (context.ContextDebug.Active)
+00817                 {
+00818                         context.ContextDebug.Param.push_back(&listBidon);                                       
+00819                         listBidon.incRef();
+00820                         methodContex = new NLAISCRIPT::CMethodContextDebug();
+00821                 }                               
+00822                 else
+00823                 {
+00824                         methodContex = new NLAISCRIPT::CMethodContext();
+00825                 }
+00826                 const IObjectIA *self = context.Self;
+00827                 context.Self = this;
+00828                 NLAISCRIPT::CCallMethod opCall(methodContex,msg->getHeritanceIndex(),msg->getMethodIndex());
+00829                 opCall.runOpCode(context);
+00830                 context.Self = self;
+00831                 IMessageBase *returnMsg = (IMessageBase *)context.Stack[(int)context.Stack];
+00832                 returnMsg->incRef();
+00833                 context.Stack--;
+00834                 switch(msg->getPerformatif())
+00835                 {
+00836                 case IMessageBase::PExec:
+00837                         if(msg->getContinuation() != NULL)
+00838                         {
+00839                                 IMessageBase *o = (IMessageBase *)returnMsg->clone();
+00840                                 o->setMethodIndex(-1,-1);
+00841                                 this->incRef();
+00842                                 o->setSender(this);
+00843                                 ((IObjectIA *)msg->getContinuation())->incRef();
+00844                                 o->setReceiver((IObjectIA *)msg->getContinuation());
+00845                                 ((IObjectIA *)msg->getContinuation())->sendMessage(o);
+00846                         }
+00847                         break;
+00848                 case IMessageBase::PAchieve:
+00849                         if(msg->getContinuation() != NULL)
+00850                         {
+00851                                 IMessageBase *o = (IMessageBase *)returnMsg->clone();
+00852                                 o->setMethodIndex(-1,-1);
+00853                                 this->incRef();
+00854                                 o->setSender(this);
+00855                                 ((IObjectIA *)msg->getContinuation())->incRef();
+00856                                 o->setReceiver((IObjectIA *)msg->getContinuation());
+00857                                 ((IObjectIA *)msg->getContinuation())->sendMessage(o);
+00858                         }
+00859                         break;
+00860                 case IMessageBase::PAsk:
+00861                         {
+00862                                 IMessageBase *o = (IMessageBase *)returnMsg->clone();
+00863                                 o->setMethodIndex(-1,-1);
+00864                                 this->incRef();
+00865                                 o->setSender(this);
+00866                                 o->setPerformatif(IMessageBase::PTell);
+00867                                 if(returnMsg->getSender() != NULL) ((IObjectIA *)returnMsg->getSender())->incRef();
+00868                                 o->setReceiver((IObjectIA *)returnMsg->getSender());
+00869                                 ((IObjectIA *)msg->getSender())->sendMessage(o);
+00870 
+00871 
+00872                                 if(msg->getContinuation() != NULL)
+00873                                 {
+00874                                         IMessageBase *o = (IMessageBase *)returnMsg->clone();
+00875                                         o->setMethodIndex(-1,-1);
+00876                                         this->incRef();
+00877                                         o->setSender(this);
+00878                                         if(msg->getContinuation() != NULL) ((IObjectIA *)msg->getContinuation())->incRef();
+00879                                         o->setReceiver((IObjectIA *)msg->getContinuation());
+00880                                         o->setPerformatif(IMessageBase::PTell);
+00881                                         ((IObjectIA *)msg->getContinuation())->sendMessage(o);
+00882                                 }
+00883                         }
+00884                         break;
+00885                 case IMessageBase::PTell:
+00886                         if(msg->getContinuation() != NULL)
+00887                         {
+00888                                 IMessageBase *o = (IMessageBase *)returnMsg->clone();
+00889                                 o->setMethodIndex(-1,-1);
+00890                                 this->incRef();
+00891                                 o->setSender(this);
+00892                                 if(msg->getContinuation() != NULL) ((IObjectIA *)msg->getContinuation())->incRef();
+00893                                 o->setReceiver((IObjectIA *)msg->getContinuation());
+00894                                 ((IObjectIA *)msg->getContinuation())->sendMessage(o);
+00895                         }
+00896                         break;
+00897                 case IMessageBase::PBreak:
+00898                         if(msg->getContinuation() != NULL)
+00899                         {
+00900                                 IMessageBase *o = (IMessageBase *)returnMsg->clone();
+00901                                 o->setMethodIndex(-1,-1);
+00902                                 this->incRef();
+00903                                 o->setSender(this);
+00904                                 if(msg->getContinuation() != NULL) ((IObjectIA *)msg->getContinuation())->incRef();
+00905                                 o->setReceiver((IObjectIA *)msg->getContinuation());
+00906                                 ((IObjectIA *)msg->getContinuation())->sendMessage(o);
+00907                         }
+00908                         break;
+00909                 case IMessageBase::PKill:
+00910                         if(msg->getContinuation() != NULL)
+00911                         {
+00912                                 IMessageBase *o = (IMessageBase *)returnMsg->clone();
+00913                                 o->setMethodIndex(-1,-1);
+00914                                 this->incRef();
+00915                                 o->setSender(this);
+00916                                 if(msg->getContinuation() != NULL) ((IObjectIA *)msg->getContinuation())->incRef();
+00917                                 o->setReceiver((IObjectIA *)msg->getContinuation());
+00918                                 ((IObjectIA *)msg->getContinuation())->sendMessage(o);
+00919                         }
+00920                         break;
+00921 
+00922                 }
+00923                 returnMsg->release();   
+00924         }
+00925 
+00926         void CAgentScript::processMessages()
+00927         {
+00928                 IObjectIA *c;
+00929                 if( _AgentManager != NULL) c = (IObjectIA *)_AgentManager->getAgentContext();
+00930                 else c = NULL;
+00931                 while(getMail()->getMessageCount())
+00932                 {
+00933                         IMessageBase &msg = (IMessageBase &)getMail()->getMessage();
+00934                         if(msg.getMethodIndex() >= 0)
+00935                         {
+00936                                 processMessages(&msg,c);
+00937                                 getMail()->popMessage();
+00938                         }
+00939                         else 
+00940                         {
+00941                                 IAgent::processMessages();
+00942                         }                       
+00943                 }
+00944         }
+00945 
+00946         IObjectIA::CProcessResult CAgentScript::runActivity()
+00947         {
+00948                 
+00949                 NLAISCRIPT::CCodeContext *context = (NLAISCRIPT::CCodeContext *)_AgentManager->getAgentContext();
+00950                 context->Self = this;
+00951                 runMethodeMember(_AgentClass->getRunMethod(), context);
+00952                 
+00953                 return ProcessRun;
+00954         }
+00955 
+00956         bool CAgentScript::haveActivity() const
+00957         {
+00958                 return (_AgentClass->getRunMethod() >= 0);
+00959         }
+00960 
+00961         const IObjectIA::CProcessResult &CAgentScript::run()
+00962         {
+00963                 setState(processBuzzy,NULL);
+00964 
+00965 #ifdef NL_DEBUG
+00966                 const char *dbg_class_name = (const char *) getType();
+00967                 //const NLAIAGENT::IRefrence *dbg_mail_parent = _ScriptMail->getParent();
+00968 #endif
+00969 
+00970                 //_ScriptMail->run();
+00971                 getMail()->run();
+00972                 runChildren();
+00973                 
+00974                 processMessages();
+00975 
+00976                 if(haveActivity()) runActivity();
+00977 
+00978                 setState(processIdle,NULL);
+00979                 return getState();
+00980         }
+00981 
+00982         void CAgentScript::addOperator(NLAILOGIC::IBaseOperator *op)
+00983         {
+00984                 _Operators.push_back(op);
+00985         }
+00986 
+00987         void CAgentScript::remOperator(NLAILOGIC::IBaseOperator *op)
+00988         {
+00989                 std::vector<NLAILOGIC::IBaseOperator *>::iterator it_o = _Operators.begin();
+00990                 while ( it_o != _Operators.end() )
+00991                 {
+00992                         if ( op == *it_o )
+00993                         {
+00994                                 _Operators.erase( it_o );
+00995                                 return;
+00996                         }
+00997                         it_o++;
+00998                 }
+00999                 char buf[2048];
+01000                 op->getDebugString(buf);
+01001                 throw NLAIE::CExceptionObjectNotFoundError(buf);
+01002         }       
+01003 
+01004         const NLAIC::CIdentType &CAgentScript::getType() const
+01005         {
+01006                 if ( _AgentClass ) 
+01007                         return _AgentClass->getType();
+01008                 else
+01009                         return IdAgentScript;
+01010         }
+01011 
+01012         IObjectIA::CProcessResult CAgentScript::runMethodBase(int heritance, int index,IObjectIA *o)
+01013         {
+01014                 switch(index - IAgent::getMethodIndexSize())
+01015                 {
+01016                 case TSend:
+01017                         {
+01018                                 return sendMethod(o);
+01019                         }
+01020 
+01021                 case TSendComponent:
+01022                         {
+01023                                 return sendMethodCompoment(o);
+01024                         }
+01025 
+01026                 case TGetChildTag:
+01027                         {
+01028                                 return getDynamicAgent((IBaseGroupType *)o);
+01029                         }
+01030 
+01031                 case TAddChildTag:
+01032                         {
+01033                                 return addDynamicAgent((IBaseGroupType *)o);
+01034                         }
+01035                 case TFather:
+01036                         {
+01037                                 IObjectIA::CProcessResult a;
+01038                                 a.Result = (IObjectIA *)getParent();
+01039                                 a.Result->incRef();
+01040                                 return a;
+01041                         }
+01042 
+01043                 case TSelf:
+01044                         {
+01045                                 IObjectIA::CProcessResult a;
+01046                                 a.Result = new CLocalAgentMail(this);
+01047                                 return a;
+01048                         }
+01049                 case TGetName:
+01050                         {                               
+01051                                 return getDynamicName((IBaseGroupType *)o);
+01052                         }
+01053 
+01054                 case TRemoveChild:
+01055                         {
+01056                                 return removeDynamic((IBaseGroupType *)o);
+01057                         }
+01058 
+01059                 case TRunAskParentNotify:
+01060                         {                               
+01061                                 return runAskParentNotify((IBaseGroupType *)o);
+01062                         }
+01063 
+01064                 case TRunTellParentNotify:
+01065                         {                               
+01066                                 return runTellParentNotify((IBaseGroupType *)o);
+01067                         }
+01069         // Temp, to be transfered in CGDAgentScript (Goal Driven Agent)
+01070 
+01071                 case TGoal:
+01072                         {                               
+01073                                 return runGoalMsg((IBaseGroupType *)o);
+01074                         }
+01076 
+01077 
+01078                 default:
+01079                         return IAgent::runMethodeMember(index,o);
+01080                                 
+01081                 }
+01082                 
+01083         }
+01084 
+01085         IObjectIA::CProcessResult CAgentScript::runMethodBase(int index,IObjectIA *o)
+01086         {               
+01087                 switch(index - IAgent::getMethodIndexSize())
+01088                 {
+01089                 case TSend:
+01090                         {
+01091                                 return sendMethod(o);
+01092                         }
+01093 
+01094                 case TSendComponent:
+01095                         {
+01096                                 return sendMethodCompoment(o);
+01097                         }
+01098 
+01099                 case TGetChildTag:
+01100                         {
+01101                                 return getDynamicAgent((IBaseGroupType *)o);
+01102                         }
+01103 
+01104                 case TAddChildTag:
+01105                         {
+01106                                 return addDynamicAgent((IBaseGroupType *)o);
+01107                         }
+01108                 case TFather:
+01109                         {
+01110                                 IObjectIA::CProcessResult a;
+01111                                 a.Result = (IObjectIA *)getParent();
+01112                                 a.Result->incRef();
+01113                                 return a;
+01114                         }
+01115 
+01116                 case TSelf:
+01117                         {
+01118                                 IObjectIA::CProcessResult a;
+01119                                 a.Result = new CLocalAgentMail(this);
+01120                                 return a;
+01121                         }
+01122                 case TGetName:
+01123                         {                               
+01124                                 return getDynamicName((IBaseGroupType *)o);
+01125                         }
+01126 
+01127                 case TRunAskParentNotify:
+01128                         {                               
+01129                                 return runAskParentNotify((IBaseGroupType *)o);
+01130                         }
+01131 
+01132                 case TRunTellParentNotify:
+01133                         {                               
+01134                                 return runTellParentNotify((IBaseGroupType *)o);
+01135                         }
+01136 
+01138         // Temp, to be transfered in CGDAgentScript (Goal Driven Agent)
+01139 
+01140                 case TGoal:
+01141                         {                               
+01142                                 return runGoalMsg((IBaseGroupType *)o);
+01143                         }
+01145 
+01146                 default:
+01147                         return IAgent::runMethodeMember(index,o);
+01148                 }
+01149         }
+01150 
+01151         int CAgentScript::getBaseMethodCount() const
+01152         {
+01153                 return IAgentManager::getBaseMethodCount() + CAgentScript::TLastM;
+01154         }
+01155 
+01156         IObjectIA::CProcessResult CAgentScript::runMethodeMember(sint32 inheritance, sint32 index, IObjectIA *c)        
+01157         {
+01158 
+01159                 if(c->getType() != NLAISCRIPT::CCodeContext::IdCodeContext)
+01160                 {
+01161                         return IAgent::runMethodeMember(inheritance,index, c);
+01162                 }
+01163                 
+01164                 NLAISCRIPT::IOpCode *opPtr = NULL;
+01165                 NLAISCRIPT::CCodeContext &context = (NLAISCRIPT::CCodeContext &)*c;
+01166 
+01167                 int i = index - getBaseMethodCount();
+01168                 if(i < 0)
+01169                 {                       
+01170                         if (context.ContextDebug.Active)
+01171                         {
+01172                                 context.ContextDebug.Param.push_back(&listBidon);
+01173                                 listBidon.incRef();
+01174                         }
+01175                 
+01176                         IObjectIA::CProcessResult r = runMethodBase(index,(IObjectIA *)context.Param.back());
+01177                         if(r.Result != NULL)
+01178                         {
+01179                                 context.Stack++;
+01180                                 context.Stack[(int)context.Stack] = r.Result;
+01181                         }
+01182                         r.Result = NULL;
+01183                         return r;
+01184                 }
+01185                 else
+01186                 {
+01187                         opPtr = getMethode(inheritance,i);
+01188                 }
+01189                 
+01190                 IObjectIA::CProcessResult r;
+01191                 if(opPtr != NULL)
+01192                 {
+01193                         NLAISCRIPT::IOpCode &op = *opPtr;
+01194                         NLAISCRIPT::CCodeBrancheRun *opTmp = context.Code;
+01195                         int ip = (uint32)*context.Code;
+01196                         context.Code = (NLAISCRIPT::CCodeBrancheRun *)&op;              
+01197                         *context.Code = 0;
+01198 
+01199                         /*TProcessStatement k = IObjectIA::ProcessIdle;
+01200 
+01201                         while(k != IObjectIA::ProcessEnd)
+01202                         {
+01203                                 k = op.run(context);
+01204                         }*/
+01205 
+01206                         r = ((NLAISCRIPT::ICodeBranche *)opPtr)->run(context);
+01207                         // If we are in Debug Mode
+01208                         if (context.ContextDebug.Active)
+01209                         {
+01210                                 context.ContextDebug.callStackPop();
+01211                         }
+01212                         *context.Code = ip;
+01213                         context.Code = opTmp;           
+01214                 }
+01215                 return r;
+01216         }
+01217 
+01218         IObjectIA::CProcessResult CAgentScript::runMethodeMember(sint32 index, IObjectIA *c)    
+01219         {
+01220                 if(c->getType() != NLAISCRIPT::CCodeContext::IdCodeContext)
+01221                 {
+01222                         return IAgent::runMethodeMember(index, c);
+01223                 }
+01224 
+01225                 NLAISCRIPT::IOpCode *opPtr = NULL;
+01226                 NLAISCRIPT::CCodeContext &context = (NLAISCRIPT::CCodeContext &)*c;
+01227 
+01228                 int i = index - getBaseMethodCount();
+01229                 if(i < 0)
+01230                 {
+01231                         if (context.ContextDebug.Active)
+01232                         {
+01233                                 context.ContextDebug.Param.push_back(&listBidon);
+01234                                 listBidon.incRef();
+01235                         }
+01236 
+01237                         IObjectIA::CProcessResult r = runMethodBase(index,(IObjectIA *)context.Param.back());
+01238                         if(r.Result != NULL)
+01239                         {
+01240                                 context.Stack++;
+01241                                 context.Stack[(int)context.Stack] = r.Result;
+01242                         }
+01243                         r.Result = NULL;
+01244                         return r;
+01245                 }
+01246                 else
+01247                 {
+01248                         opPtr = getMethode(i);
+01249                 }
+01250                 IObjectIA::CProcessResult r;
+01251                 if(opPtr != NULL)
+01252                 {
+01253                         NLAISCRIPT::IOpCode &op = *opPtr;//getMethode(inheritance,i);
+01254                         NLAISCRIPT::CCodeBrancheRun *opTmp = context.Code;
+01255                         int ip = (uint32)*context.Code;
+01256                         context.Code = (NLAISCRIPT::CCodeBrancheRun *)opPtr;
+01257                         *context.Code = 0;
+01258 
+01259                         /*TProcessStatement k = IObjectIA::ProcessIdle;
+01260 
+01261                         while(k != IObjectIA::ProcessEnd)
+01262                         {
+01263                                 k = op.run(context);    
+01264                         }*/             
+01265                         r = ((NLAISCRIPT::ICodeBranche *)opPtr)->run(context);
+01266 
+01267                         // If we are in Debug Mode
+01268                         if (context.ContextDebug.Active)
+01269                         {
+01270                                 context.ContextDebug.callStackPop();
+01271                         }
+01272 
+01273                         *context.Code = ip;
+01274                         context.Code = opTmp;           
+01275                 }
+01276                 return r;
+01277         }
+01278 
+01279         tQueue CAgentScript::getPrivateMember(const IVarName *className,const IVarName *methodName,const IObjectIA &param) const
+01280         {               
+01281                 sint i;
+01282                 CAgentScript::TMethodNumDef index = CAgentScript::TLastM;
+01283                 for(i = 0; i < CAgentScript::TLastM; i ++)
+01284                 {
+01285                         if(CAgentScript::StaticMethod[i]->MethodName == *methodName)
+01286                         {
+01287                                 index = (CAgentScript::TMethodNumDef)CAgentScript::StaticMethod[i]->Index;
+01288                                 switch(CAgentScript::StaticMethod[i]->CheckArgType)
+01289                                 {
+01290                                 case CAgentScript::CheckAll:
+01291                                         {
+01292                                                 double d = ((NLAISCRIPT::CParam &)*CAgentScript::StaticMethod[i]->ArgType).eval((NLAISCRIPT::CParam &)param);
+01293                                                 if(d >= 0.0)
+01294                                                 {                                                               
+01295                                                         tQueue r;
+01296                                                         CAgentScript::StaticMethod[i]->ReturnValue->incRef();
+01297                                                         r.push(CIdMethod(       (IAgent::getMethodIndexSize() + CAgentScript::StaticMethod[i]->Index),
+01298                                                                                                 0.0,
+01299                                                                                                 NULL,
+01300                                                                                                 CAgentScript::StaticMethod[i]->ReturnValue));
+01301                                                         return r;
+01302                                                 }
+01303                                         }       
+01304                                         index = CAgentScript::TLastM;
+01305                                         break;
+01306                                 
+01307 
+01308                                 case CAgentScript::CheckCount:
+01309                                         {
+01310                                                 if(((NLAISCRIPT::CParam &)param).size() == CAgentScript::StaticMethod[i]->ArgCount)
+01311                                                 {                                                               
+01312                                                         tQueue r;
+01313                                                         CAgentScript::StaticMethod[i]->ReturnValue->incRef();
+01314                                                         r.push(CIdMethod(       (IAgent::getMethodIndexSize() + CAgentScript::StaticMethod[i]->Index),
+01315                                                                                                 0.0,
+01316                                                                                                 NULL,
+01317                                                                                                 CAgentScript::StaticMethod[i]->ReturnValue ));
+01318                                                         return r;
+01319                                                 }
+01320                                         }
+01321                                         index = CAgentScript::TLastM;
+01322                                         break;
+01323 
+01324                                 case CAgentScript::DoNotCheck:
+01325                                         {                                                       
+01326                                                 tQueue r;
+01327                                                 CAgentScript::StaticMethod[i]->ReturnValue->incRef();
+01328                                                 r.push(CIdMethod(       (IAgent::getMethodIndexSize() + CAgentScript::StaticMethod[i]->Index),
+01329                                                                                         0.0,
+01330                                                                                         NULL,
+01331                                                                                         CAgentScript::StaticMethod[i]->ReturnValue));
+01332                                                 return r;                                               
+01333                                         }
+01334                                         index = CAgentScript::TLastM;
+01335                                         break;
+01336                                 }
+01337                         }                       
+01338                 }
+01339                 return tQueue();
+01340         }
+01341 
+01342         tQueue CAgentScript::isMember(const IVarName *className,const IVarName *methodName,const IObjectIA &param) const
+01343         {               
+01344 #ifdef NL_DEBUG 
+01345         char nameM[1024*4];
+01346         char nameP[1024*4];
+01347         char name[1024*8];
+01348         methodName->getDebugString(nameM);
+01349         param.getDebugString(nameP);
+01350         sprintf(name,"%s%s",nameM,nameP);
+01351 
+01352         const char *dbg_class_name = (const char *) getType();
+01353         const char *dbg_base_class_name = NULL;
+01354         if(_AgentClass) dbg_base_class_name = (const char *) _AgentClass->getType();
+01355 #endif
+01356                 
+01357 
+01358                 if(className == NULL)
+01359                 {
+01360 
+01361                         tQueue r;
+01362                         if(_AgentClass != NULL) r = _AgentClass->getPrivateMember(className,methodName,param);                  
+01363 
+01364                         if(r.size()) return r;
+01365                         else
+01366                         {
+01367                                 r = getPrivateMember(className,methodName,param);
+01368                                 if(r.size()) return r;
+01369                                 else
+01370                                 {
+01371                                         return IAgent::isMember(className,methodName,param);
+01372                                 }
+01373                         }
+01374                 
+01375                 }               
+01376                 else 
+01377                 if(*className == CStringVarName("Agent"))
+01378                 {                                       
+01379                         tQueue r;
+01380                         r = getPrivateMember(className,methodName,param);
+01381                         if(r.size()) return r;
+01382                         else
+01383                         {
+01384                                 r = _AgentClass->getPrivateMember(className,methodName,param);                  
+01385 
+01386                                 if(r.size()) return r;
+01387                                 else
+01388                                 {                       
+01389                                         return IAgent::isMember(className,methodName,param);
+01390                                 }
+01391                                 
+01392                         }
+01393                         
+01394                 }
+01395                 return tQueue();
+01396         }
+01397 
+01398         sint32 CAgentScript::isClassInheritedFrom(const IVarName &name) const
+01399         {
+01400                 return _AgentClass->isClassInheritedFrom( name );
+01401         }       
+01402 
+01403         sint32 CAgentScript::getStaticMemberIndex(const IVarName &name) const
+01404         {
+01405                 return _AgentClass->getInheritedStaticMemberIndex(name);
+01406         }
+01407 
+01409         // Temp, to be transfered in CGDAgentScript (Goal Driven Agent)
+01410 
+01411         IObjectIA::CProcessResult CAgentScript::runGoalMsg(IBaseGroupType *g)
+01412         {
+01413                 NLAILOGIC::CGoal *goal = (NLAILOGIC::CGoal *) g->get();
+01414 #ifdef NL_DEBUG
+01415                                 char buffer[1024 * 2];
+01416                                 goal->getDebugString( buffer );
+01417 #endif
+01418                 _GoalStack.push_back( goal );
+01419 
+01420                 IObjectIA::CProcessResult r;
+01421                 r.Result = NULL;
+01422                 return r;
+01423         }
+01425 }
+
+ + +
                                                                                                                                                                    +
+ + -- cgit v1.2.1