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

Référence de la classe Parser< T > (modèle)

Parser. Plus de détails...

#include <Parser.h>

Liste de tous les membres

Fonctions membres publiques

 Parser (T *pObj)
 ~Parser ()
void AddRule (ROUTINE pFunction, const char *pSyntax,...)
 Ajoute une règle.
void DelRule (unsigned int iPos)
 Supprime une règle.
const char * GetSyntax (unsigned int iPos)
 Retourne la syntax de la règle.
unsigned int GetNbRule ()
 Retourne le nombre de règles.
void ParseLine (const char *pBuffer)
 Parse un buffer.
void Parse (const char *pBuffer)
 Parse un buffer.


Description détaillée

template<class T>
class Parser< T >

Parser à pseudo langage programmable.

Définition à la ligne 51 du fichier Parser.h.


Documentation des contructeurs et destructeur

template<class T>
Parser< T >::Parser T *  pObj  )  [inline]
 

Initialise avec des paramétres par defaut.

Paramètres:
pObj class ou structure à passer au routine

Définition à la ligne 62 du fichier Parser.h.

00063     {
00064         obj = pObj;
00065         *none   = '\0';
00066     };

template<class T>
Parser< T >::~Parser  )  [inline]
 

Libère la mémoire proprement

Définition à la ligne 70 du fichier Parser.h.

00071     {
00072         unsigned int    i;
00073 
00074         for(i = 0; i < rules.size(); i ++)
00075             delete rules[i];
00076         rules.clear();
00077     };


Documentation des fonctions membres

template<class T>
void Parser< T >::AddRule ROUTINE  pFunction,
const char *  pSyntax,
  ...
[inline]
 

Ajoute une règle avec une syntax et une routine lier.

Paramètres:
pFunction routine a lier.
pSyntax syntax de la règle.

Définition à la ligne 84 du fichier Parser.h.

00085     {
00086         char        temp[PARSER_BUFFER];
00087         va_list     args;
00088 
00089         va_start(args, pSyntax);
00090         vsprintf(temp, pSyntax, args);
00091         va_end(args);
00092 
00093         rules.push_back(new ParserRule(pFunction, temp));
00094     };

template<class T>
void Parser< T >::DelRule unsigned int  iPos  )  [inline]
 

Supprime la règle à la position iPos.

Paramètres:
iPos position de la règle.

Définition à la ligne 100 du fichier Parser.h.

00101     {
00102         if(iPos < rules.size())
00103             rules.erase(rules.begin() + iPos);
00104     };

template<class T>
unsigned int Parser< T >::GetNbRule  )  [inline]
 

Retourne le nombre de règles du parser.

Renvoie:
nombre de requette du parser.

Définition à la ligne 123 du fichier Parser.h.

00124     {
00125         return rules.size();
00126     };

template<class T>
const char* Parser< T >::GetSyntax unsigned int  iPos  )  [inline]
 

Retourne la syntax de la règle iPos.

Paramètres:
iPos Position de la règle.
Renvoie:
pointeur sur la syntax de la règle.

Définition à la ligne 111 du fichier Parser.h.

00112     {
00113         if(iPos < rules.size())
00114             return rules[iPos]->syntax.data();
00115 
00116         return none;
00117     };

template<class T>
void Parser< T >::Parse const char *  pBuffer  )  [inline]
 

Parse le buffer en un seul block, recherche et éxécute une routine.

Paramètres:
pBuffer buffer à parser.

Définition à la ligne 162 du fichier Parser.h.

Références ParserRuleParameter< T >::Add(), CATCH, IsAlphaNumCar(), PARAMETRE, et TRY.

00163     {
00164         unsigned int            i = 0;
00165         const char              *pSyntax = NULL;
00166         char                    end = '\0';
00167         char                    buffer[PARSER_BUFFER];
00168         char                    temp[PARSER_BUFFER];
00169         char                    label[PARSER_LABEL];
00170         char                    *pBuf = NULL;
00171         char                    *pTemp = NULL;
00172         char                    *pLabel = NULL;
00173         ParserRuleParameter<T>  *parameter = NULL;
00174         TRY
00175 
00176         strncpy(buffer, pBuffer, PARSER_BUFFER);
00177 
00178         for(i = 0; i < rules.size(); i++)
00179         {
00180             pBuf = buffer;
00181             pSyntax = rules[i]->syntax.c_str();
00182             parameter = new ParserRuleParameter<T>(obj);
00183 
00184             do
00185             {
00186                 if(*pSyntax == PARSER_TOK) //si c'est un paramètre
00187                 {
00188                     pLabel = label;
00189                     pTemp = temp;
00190 
00191                     pSyntax++; //passe le PARSER_TOK
00192                     while(IsAlphaNumCar(*pSyntax))
00193                         *pLabel++ = *pSyntax++; //copie le nom du paramètre
00194                     *pLabel = '\0';
00195 
00196                     end = *pSyntax; //carractère où s'arrète le paramètre
00197 
00198                     while((*pBuf != '\0') && (*pBuf != end))
00199                     {
00200                         *pTemp = *pBuf; //copie la valeur du paramètre
00201                         pTemp++;
00202                         pBuf++;
00203                     }
00204                     *pTemp = '\0';
00205                     pBuf++; //pour être différent de Tok
00206 
00207                     parameter->Add(label, temp);
00208                 }
00209                 else //si c'est un carractère non utile
00210                 {
00211                     if(*pSyntax == *pBuf)
00212                         pBuf++;
00213                     else //si la requette ne correspond pas au mask
00214                         break;
00215                 }
00216 
00217                 if(*pSyntax != '\0')
00218                     pSyntax++;
00219             }
00220             while(*pBuf && *pSyntax);
00221 
00222             if((*pSyntax == '\0') && (*pBuf == '\0'))
00223                 rules[i]->function((PARAMETRE)parameter);
00224 
00225             delete parameter;
00226         }
00227 
00228         CATCH
00229     };

template<class T>
void Parser< T >::ParseLine const char *  pBuffer  )  [inline]
 

Parse un buffer ligne à ligne, recherche et éxécute les routines.

Paramètres:
pBuffer buffer à parser.

Définition à la ligne 132 du fichier Parser.h.

Références CATCH, et TRY.

00133     {
00134         char            out[PARSER_BUFFER];
00135         const char      *b = pBuffer;
00136         char            *o = out;
00137         TRY
00138 
00139         while(*b)
00140         {
00141             if((*b != '\n') && (*b != '\r'))
00142             {
00143                 *o++ = *b;
00144             }
00145             else if(out != o)
00146             {
00147                 *o = '\0';
00148                 Parse(out);
00149                 o = out;
00150             }
00151 
00152             b++;
00153         }
00154 
00155         CATCH
00156     };


La documentation de cette classe a été générée à partir du fichier suivant:
Généré le Thu Jun 12 09:12:30 2008 pour A.I.F. par  doxygen 1.3.9.1