/** @file /ai/aiscriptcaller.h @brief Header tridy pro volani AI skriptu. @author PZ @version 0.1 */ #ifndef __PETR_ZITA_AI_SCRIPT_CALLER__ #define __PETR_ZITA_AI_SCRIPT_CALLER__ #pragma warning( disable : 4290 ) /** Maximalni delka TCL retezce, kterou umi ScriptCaller zpracovat. */ #define STRING_VARIABLE_BUFFER_SIZE 10000 /** Typ STL kontajneru pro TCL promenne se kterymi pracuje ScriptCaller. */ #define AI_SCRIPT_VARIABLES_CONTAINER list #include #include #include "common/exc.h" #include "common/mm.h" #include "common/rm/rminit.h" #include "common/TCL/tcl_script.h" namespace ai_ns { /** Typ TCL promenne skriptu. */ typedef enum { AVT_INT, ///< typ int AVT_REAL, ///< typ float AVT_STRING ///< typ cha* } TTCLAIVariableType; /** Popis TCL promenne skriptu. */ typedef struct { char* name; ///< jmeno promenne skriptu TTCLAIVariableType varType; ///< typ promenne skriptu void* data; ///< alokovana data pro promennou } TTCLAIVariableDescription; /** Trida reprezentujici mnozinu promennych. */ class CTCLAIVar { public: /** Konstruktor. */ CTCLAIVar(); /** Destruktor. */ ~CTCLAIVar(); /** Metoda vymaze vsechny pridane promenne z vnitrni struktury. */ void clearAll(); /** Metoda prida promennou typu int do vnitrni struktury. */ void addInt(char* varName,int value); /** Metoda prida promennou typu float do vnitrni struktury. */ void addReal(char* varName,float value); /** Metoda prida promennou typu char* do vnitrni struktury. */ void addString(char* varName,char* value); /** Metoda vrati promennou typu int obsazenou ve vnitrni strukture. @throw E_8K_AI_VarNotFound @throw E_8K_AI_BadVarType */ int getInt(char* varName) throw(E_8K_AI_VarNotFound,E_8K_AI_BadVarType); /** Metoda vrati promennou typu float obsazenou ve vnitrni strukture. @throw E_8K_AI_VarNotFound @throw E_8K_AI_BadVarType */ float getReal(char* varName) throw(E_8K_AI_VarNotFound,E_8K_AI_BadVarType); /** Metoda vrati promennou typu char* obsazenou ve vnitrni strukture. @throw E_8K_AI_VarNotFound @throw E_8K_AI_BadVarType */ char* getString(char* varName) throw(E_8K_AI_VarNotFound,E_8K_AI_BadVarType); private: /** Kontainer, do ktereho jsou vnitrne ukladany promenne. */ std::AI_SCRIPT_VARIABLES_CONTAINER varcontainer; }; /** Trida realizujici volani TCL skriptu pro vypocet AI. */ class CAIScriptCaller { public: /** Konstruktor. */ CAIScriptCaller(); /** Destruktor. */ ~CAIScriptCaller(); /** Metoda pocitajici vzorec v TCL skriptu. @param scriptID ID TCL skriptu definovane v /ai/aiscriptids.h @param scriptInput objekt reprezentujici mnozinu vstupnich promennych @return CTCLAIVar* objekt reprezentujici mnozinu vystupnich promennych @throw E_8K_AI_BadScriptCounting */ CTCLAIVar* countScript(int scriptID,CTCLAIVar* scriptInput) throw(E_8K_AI_BadScriptCounting); private: /** Resource manager umoznujici precteni dat skriptu v XML formatu. */ rm::TRM_xml_i* rmxi; /** Interpreter volani TCL skriptu. */ TTCL_Interpreter* TCLinter; }; } // end of namespace "ai_ns" #endif