Page principale | Liste alphabétique | Liste des classes | Liste des fichiers | Membres de classe | Membres de fichier | Pages associées

ParserRule.h

Aller à la documentation de ce fichier.
00001 /*! \file ParserRule.h
00002     \brief Structures pour parser.
00003 
00004     Structures de données utilisées par le parser.
00005 
00006     \author     aerith (http://aerith.fr)
00007     \version    1.0
00008     \date       20/04/2008
00009 */
00010 
00011 #ifndef INCLUDE_RSRC_PARSER_RULE
00012 #define INCLUDE_RSRC_PARSER_RULE
00013 
00014 #include    "../Tools/Tools.h"
00015 #include    <vector>
00016 #include    <string>
00017 
00018 using namespace std;
00019 
00020 
00021 //! Data des paramétres.
00022 /*! Data des paramétres passé à la routine d'une règle.
00023 */
00024 class ParserRuleData
00025 {
00026 public  :
00027     string          label;      /*!< Nom du paramètre.                          */
00028     string          data;       /*!< valeur du paramètre.                       */
00029 
00030     /*! Initialise avec des paramétres par defaut.
00031         \param pLabel nom du paramètre
00032         \param pData valeur du paramètre
00033     */
00034     ParserRuleData(const char *pLabel, const char *pData)
00035     {
00036         label =  pLabel;
00037         data = pData;
00038     };
00039 };
00040 
00041 //! Parametre pour une règle.
00042 /*! Parametre passé à la routine d'une règle.
00043 */
00044 template<class T>
00045 class ParserRuleParameter
00046 {
00047 private :
00048     std::vector<ParserRuleData *>   parameters;     /*!< Chaque ligne est un paramétre.             */
00049     T                               *obj;           /*!< Classe ou structure à passer aux routines. */
00050     char                            none[1];        /*!< Valeur d'un get non trouvé.                */
00051 
00052 public  :
00053     /*! Initialise avec des paramétres par defaut.
00054     */
00055     inline  ParserRuleParameter(T *pObj)
00056     {
00057         obj = pObj;
00058         *none   = '\0';
00059     };
00060 
00061     /*! Libère la mémoire proprement
00062     */
00063     inline  ~ParserRuleParameter()
00064     {
00065         unsigned int    i;
00066 
00067         for(i = 0; i < parameters.size(); i++)
00068             delete parameters[i];
00069         parameters.clear();
00070     };
00071 
00072     //! Ajoute un parametre.
00073     /*! Ajoute un parametre à la règle.
00074         \param pLabel pointeur sur le label.
00075         \param pData pointeur sur la data.
00076     */
00077     inline void     Add(const char *pLabel, const char *pData)
00078     {
00079         parameters.push_back(new ParserRuleData(pLabel, pData));
00080     };
00081 
00082     //! Retourne un parametre.
00083     /*! Retourne un parametre de la règle.
00084         \param pLabel nom du parametre.
00085         \return un pointeur sur le parametre.
00086     */
00087     inline const char   *Get(const char *pLabel)
00088     {
00089         unsigned int    i;
00090 
00091         for(i = 0; i < parameters.size(); i++)
00092             if(parameters[i]->label.compare(pLabel) == 0)
00093                 return parameters[i]->data.data();
00094 
00095         return none;
00096     };
00097 
00098     //! Retourne la taille d'un parametre.
00099     /*! Retourne la taille d'un parametre de la règle.
00100         \param pLabel nom du parametre.
00101         \return la taille du parametre.
00102     */
00103     inline unsigned int     GetSize(const char *pLabel)
00104     {
00105         unsigned int    i;
00106 
00107         for(i = 0; i < parameters.size(); i++)
00108             if(parameters[i]->label.compare(pLabel) == 0)
00109                 return parameters[i]->data.size();
00110 
00111         return 0;
00112     };
00113 
00114     //! Retourne une data \a int.
00115     /*! Retourne une data de type \a int.
00116         \param pLabel nom du parametre.
00117         \return le parametre sous forme d'entier.
00118     */
00119     inline int      GetAsInt(const char *pLabel)
00120     {
00121         return atoi(Get(pLabel));
00122     };
00123 
00124     //! Retourne une data \a float.
00125     /*! Retourne une data de type \a float.
00126         \param pLabel nom du parametre.
00127         \return le parametre sous forme de réel.
00128     */
00129     inline float    GetAsFloat(const char *pLabel)
00130     {
00131         return atol(Get(pLabel));
00132     };
00133 
00134     //! Retourne une data \a char.
00135     /*! Retourne une data de type \a char.
00136         \param pLabel nom du parametre.
00137         \return le parametre sous forme de carractère.
00138     */
00139     inline char     GetAsChar(const char *pLabel)
00140     {
00141         return *Get(pLabel);
00142     };
00143 
00144     //! Retourne le nombre de datas.
00145     /*! Retourne le nombre de datas du paramétre.
00146         \return nombre de requette du parser.
00147     */
00148     inline int      GetNbParameter()
00149     {
00150         return parameters.size();
00151     };
00152 
00153     //! Retourne un pointeur sur l'objet passé aux routine.
00154     /*! Retourne un pointeur sur l'objet passé aux routine.
00155         \return Pointeur sur \a obj .
00156     */
00157     inline T        *GetObj()
00158     {
00159         return obj;
00160     };
00161 };
00162 
00163 
00164 #endif

Généré le Thu Jun 12 09:12:30 2008 pour A.I.F. par  doxygen 1.3.9.1