Page principale | Hiérarchie des classes | Liste alphabétique | Liste des classes | Liste des fichiers | Membres de classe | Membres de fichier

Script.h

Aller à la documentation de ce fichier.
00001 /*! \file Script.h
00002     \brief Interpréteur de script.
00003 
00004     Interprete des scripts structurés en fonctions.
00005 
00006     \author     aerith (www.aerith.fr)
00007     \version    1.0
00008     \date       20/11/2007
00009 */
00010 
00011 #ifndef INCLUDE_RSRC_SCRIPT
00012 #define INCLUDE_RSRC_SCRIPT
00013 
00014 #include    "../Surcouche/SurcoucheMultitache.h"
00015 #include    "../Tools/Tools.h"
00016 #include    "../Error/Error.h"
00017 #include    "../String/String.h"
00018 #include    <stdio.h>
00019 #include    <vector>
00020 
00021 #define     SCRIPT_BUFFER           10240
00022 
00023 #define     SCRIPT_TYPE_STRING      1
00024 #define     SCRIPT_TYPE_INT         2
00025 #define     SCRIPT_TYPE_FLOAT       3
00026 
00027 //! Information sur une variable.
00028 /*! Information sur une variable de l'interpréteur.
00029 */
00030 typedef struct _ScriptVar
00031 {
00032     char            *Name;                  /*!< Nom de la variable.                    */
00033     String          Value;                  /*!< Valeur de la variable.                 */
00034     unsigned int    Type;                   /*!< Type de la variable.                   */
00035 } ScriptVar;
00036 
00037 //! Parametres pour une fonction.
00038 /*! Parametres pour une fonction.
00039 */
00040 typedef struct _ScriptParam
00041 {
00042     std::vector<String>         Params;         /*!< Chaque ligne est un parametre.         */
00043     std::vector<ScriptVar *>    *Vars;          /*!< Liste des variables.                   */
00044 } ScriptParam;
00045 
00046 typedef String  (*SCRIPT_ROUTINE)(ScriptParam); /*!< Pointeur sur une fonction.                 */
00047 
00048 //! Information sur une fonction.
00049 /*! Information sur une fonction de l'interpréteur.
00050 */
00051 typedef struct _ScriptFunc
00052 {
00053     char            *Name;                      /*!< Nom de la fonction.                    */
00054     unsigned int    NbParam;                    /*!< Nombre de paramètre de la fonction.    */
00055     SCRIPT_ROUTINE  Function;                   /*!< Fonction à éxécuté.                    */
00056 } ScriptFunc;
00057 
00058 //! Interpréteur de script.
00059 /*! Interprete des scripts structurés en fonctions.
00060 */
00061 class Script
00062 {
00063 private :
00064     std::vector<ScriptFunc *>   Functions;      /*!< Chaque lignes est une fonction.            */
00065     std::vector<ScriptVar *>    Vars;           /*!< Chaque lignes est une variable.            */
00066     static unsigned int         ScriptInstance; /*!< Compte les instance de la class.           */
00067     static MUTEX                ScriptMutex;    /*!< Utiliser des que l'on accede à un fichier. */
00068     unsigned int                NoLine;         /*!< Numéro de la ligne en cour de traitement.  */
00069     unsigned int                NoCar;          /*!< Numéro du carractère en cour d'analise.    */
00070 
00071     //! Afiche une erreur de parsage.
00072     /*! Affiche des informations sur une erreur lors du parsage d'un fichier.
00073         \param pDesc déscription de l'erreur.
00074     */
00075     void    LogError(char *pDesc);
00076 
00077 
00078 public  :
00079     /*! Initialise avec des paramétres par defaut.
00080     */
00081     Script();
00082 
00083     /*! Libère la mémoire proprement
00084     */
00085     ~Script();
00086 
00087     //! Ajoute une fonction.
00088     /*! Ajoute une tonction.
00089         \param pName nom de la fonction.
00090         \param iNb nombre de paramètre de la fonction.
00091         \param pFunction fonction a lier.
00092         \return code d'erreur
00093         \sa DelFunction() et GetNbFunction().
00094     */
00095     int     AddFunction(char *pName, unsigned int iNb, SCRIPT_ROUTINE pFunction);
00096 
00097     //! Supprime une fonction.
00098     /*! Supprime la fonction à la position \a iPos.
00099         \param iPos position de la fonction.
00100         \return code d'erreur
00101         \sa AddFunction() et GetNbFunction().
00102     */
00103     int     DelFunction(unsigned int iPos);
00104 
00105     //! Supprime une fonction.
00106     /*! Supprime la fonction ayant le nom \a pName.
00107         \param pName nom de la fonction.
00108         \return code d'erreur
00109         \sa AddFunction() et GetNbFunction().
00110     */
00111     int     DelFunction(char *pName);
00112 
00113     //! Retourne le nom de la fonction.
00114     /*! Retourne le nom de la fonction numéro \a iPos.
00115         \param iPos position de la fonction.
00116         \return pointeur sur le nom de la fonction \a Name.
00117     */
00118     char    *GetName(unsigned int iPos);
00119 
00120     //! Retourne le nombre de parametre d'une fonction.
00121     /*! Retourne le nombre de parametre de la fonction numéro \a iPos.
00122         \param pName nom de la fonction.
00123         \return nombre de paramètre de la fonction \a NbParam.
00124     */
00125     int     GetNbParam(unsigned int iPos);
00126 
00127     //! Retourne le nombre de parametre d'une fonction.
00128     /*! Retourne le nombre de parametre de la fonction \a pName.
00129         \param pName nom de la fonction.
00130         \return nombre de paramètre de la fonction \a NbParam.
00131     */
00132     int     GetNbParam(char *pName);
00133 
00134     //! Retourne le nombre de fonction.
00135     /*! Retourne le nombre de fonction de l'interpreteur.
00136         \return nombre de fonction de l'interpréteur.
00137     */
00138     int     GetNbFunction();
00139 
00140     //! Parse un fichier.
00141     /*! Parse un fichier, recherche et éxécute des fonctions.
00142         \param pName nom du fichier à parser.
00143         \return chaine de carractère résultat.
00144     */
00145     String  ParseFile(char *pName);
00146 
00147     //! Parse un buffer.
00148     /*! Parse un buffer, recherche et éxécute des fonctions.
00149         \param pBuffer buffer à parser.
00150         \return chaine de carractère résultat.
00151     */
00152     String  Parse(String pBuffer);
00153 };
00154 
00155 
00156 #endif

Généré le Thu Jan 24 12:36:04 2008 pour A.I.F. par  doxygen 1.3.9.1