#include <XMLObjet.h>
Graphe d'héritage de XMLObjet:

Fonctions membres publiques | |
| XMLObjet () | |
| ~XMLObjet () | |
| void | LogError (char *pDesc) |
| Log une erreur. | |
| int | Load (int iNoLine=1, int iNoCar=0) |
| Charge un fichier. | |
| int | Save (int iDec=0) |
| Sauve dans un fichier. | |
| int | GetNbInstance () |
| Retourne le nombre d'instance. | |
| char * | GetFileName () |
| Retourne le nom du fichier. | |
| int | Print (FILE *pFile) |
| Affiche la structure. | |
| int | GetType () |
| Retourne le type de l'objet. | |
| char * | GetName () |
| Retourne le nom de l'objet. | |
| char * | SetName (char *pName) |
| Définie le nom de l'objet. | |
| int | GetSize () |
| Retourne Size. | |
| int | Print (int iDec=0) |
| Affiche la structure. | |
| int | AddParam (char *pName, char *pData) |
| Ajoute un paramétre. | |
| int | DelParam (int iPos) |
| Supprime un paramétre. | |
| int | DelParam (char *pName) |
| Supprime un paramétre. | |
| XMLParam * | GetParam (int iPos) |
| Retourne un paramétre. | |
| XMLParam * | GetParam (char *pName) |
| Retourne un paramétre. | |
| int | GetNbParam () |
| Retourne le nombre de paramétre. | |
| int | Add () |
| Ajoute un objet. | |
| int | Del (int iPos) |
| Supprime un objet. | |
| int | Del (char *pName) |
| Supprime un objet. | |
| XMLObjet * | GetSousObjet (int iPos) |
| Retourne un sous-objet. | |
| XMLObjet * | GetSousObjet (char *pName) |
| Retourne un sous-objet. | |
| char * | GetSpecial (int iPos) |
| Retourne un objet spécial. | |
| char * | GetData (int iPos) |
| Retourne un objet data. | |
| int | GetNbObjet () |
| Retourne le nombre de sous objet. | |
Attributs protégés | |
| char | FileName [XML_FILENAME] |
Attributs protégés statiques | |
| FILE * | File = NULL |
| int | XMLInstance = 0 |
| MUTEX | XMLMutex |
Définition à la ligne 63 du fichier XMLObjet.h.
|
|
Initialise avec des parametres par defaut. Définition à la ligne 19 du fichier XMLObjet.cpp. Référencé par XML::XML(). 00020 {
00021 Type = XML_TYPE_OBJET;
00022 *Name = '\0';
00023 NbParam = 0;
00024 NbObjet = 0;
00025 Data = NULL;
00026 };
|
|
|
Libere proprement la mémoire. Définition à la ligne 28 du fichier XMLObjet.cpp. 00029 {
00030 int i;
00031
00032 for(i = 0; i < NbParam; i++)
00033 delete Params[i];
00034 Params.clear();
00035
00036 for(i = 0; i < NbObjet; i++)
00037 delete Objets[i];
00038 Objets.clear();
00039
00040 if(Data)
00041 free(Data);
00042 }
|
|
|
Ajoute un objet de type XML_OBJET.
Définition à la ligne 455 du fichier XMLObjet.cpp. Référencé par Load(). 00456 {
00457 Objets.push_back(new XMLObjet);
00458
00459 if(!Objets[NbObjet])
00460 return ERROR_C_MEMORY;
00461
00462 Size++;
00463
00464 return ERROR_C_NOERROR;
00465 }
|
|
||||||||||||
|
Ajoute un paramétre avec comme nom pName.
Définition à la ligne 430 du fichier XMLObjet.cpp. Référencé par Load(). 00431 {
00432 Params.push_back(new XMLParam);
00433
00434 if(!Params[NbParam])
00435 return ERROR_C_MEMORY;
00436
00437 NbParam++;
00438
00439 return ERROR_C_NOERROR;
00440 }
|
|
|
Supprime l'objet étant à la position iPos.
Définition à la ligne 297 du fichier XMLObjet.h. 00298 {
00299 for(int i = 0; i < NbObjet; i++)
00300 {
00301 if(Objets[i]->Type == XML_TYPE_OBJET)
00302 if(!strcmp(Objets[i]->Name, pName))
00303 return Del(i);
00304 }
00305
00306 return ERROR_C_NOERROR;
00307 };
|
|
|
Supprime l'objet étant à la position iPos.
Définition à la ligne 467 du fichier XMLObjet.cpp. 00468 {
00469 if((NbObjet > 0) && (iPos < NbObjet))
00470 {
00471 Objets.erase(Objets.begin() + iPos);
00472
00473 Size--;
00474 }
00475
00476 return ERROR_C_NOERROR;
00477 }
|
|
|
Supprime le paramétre ayant le nom pName.
Définition à la ligne 223 du fichier XMLObjet.h. 00224 {
00225 for(int i = 0; i < NbParam; i++)
00226 {
00227 if(!strcmp(Params[i]->Name, pName))
00228 return DelParam(i);
00229 }
00230
00231 return ERROR_C_NOERROR;
00232 };
|
|
|
Supprime le paramétre étant à la position iPos.
Définition à la ligne 442 du fichier XMLObjet.cpp. 00443 {
00444 if((NbParam > 0) && (iPos < NbParam))
00445 {
00446 Params.erase(Params.begin() + iPos);
00447
00448 NbParam--;
00449 }
00450
00451 return ERROR_C_NOERROR;
00452 }
|
|
|
Retourne l'objet data étant à la position iPos.
Définition à la ligne 363 du fichier XMLObjet.h. 00364 {
00365 if(iPos < NbObjet)
00366 if(Objets[iPos]->Type == XML_TYPE_DATA)
00367 return Data;
00368
00369 return NULL;
00370 };
|
|
|
Retourne le nom du fichier XML FileName.
Définition à la ligne 136 du fichier XMLObjet.h. 00137 {
00138 return FileName;
00139 };
|
|
|
Retourne le nom de l'objet Name.
Définition à la ligne 163 du fichier XMLObjet.h. 00164 {
00165 return Name;
00166 };
|
|
|
Retourne le nombre d'instance de la class (pour multitache).
Définition à la ligne 127 du fichier XMLObjet.h. 00128 {
00129 return XMLInstance;
00130 };
|
|
|
Retourne le nombre de sous objet de l'objet.
Définition à la ligne 377 du fichier XMLObjet.h. 00378 {
00379 return NbObjet;
00380 };
|
|
|
Retourne le nombre de paramétre de l'objet.
Définition à la ligne 270 du fichier XMLObjet.h. 00271 {
00272 return NbParam;
00273 };
|
|
|
Retourne le paramétre ayant le nom pName.
Définition à la ligne 254 du fichier XMLObjet.h. 00255 {
00256 for(int i = 0; i < NbParam; i++)
00257 {
00258 if(!strcmp(Params[i]->Name, pName))
00259 return Params[i];
00260 }
00261
00262 return NULL;
00263 };
|
|
|
Retourne le paramétre étant à la position iPos.
Définition à la ligne 240 du fichier XMLObjet.h. 00241 {
00242 if(iPos < NbParam)
00243 return Params[iPos];
00244
00245 return NULL;
00246 };
|
|
|
Retourne le nombre, Size , d'objet ou la taille de data.
Définition à la ligne 186 du fichier XMLObjet.h. 00187 {
00188 return Size;
00189 };
|
|
|
Retourne le sous-objet ayant le nom pName.
Définition à la ligne 330 du fichier XMLObjet.h. 00331 {
00332 for(int i = 0; i < NbObjet; i++)
00333 {
00334 if(Objets[i]->Type == XML_TYPE_OBJET)
00335 if(!strcmp(Objets[i]->Name, pName))
00336 return Objets[i];
00337 }
00338
00339 return NULL;
00340 };
|
|
|
Retourne le sous-objet étant à la position iPos.
Définition à la ligne 315 du fichier XMLObjet.h. Référencé par Load(), et Print(). 00316 {
00317 if(iPos < NbObjet)
00318 if(Objets[iPos]->Type == XML_TYPE_OBJET)
00319 return Objets[iPos];
00320
00321 return NULL;
00322 };
|
|
|
Retourne l'objet spécial étant à la position iPos.
Définition à la ligne 348 du fichier XMLObjet.h. 00349 {
00350 if(iPos < NbObjet)
00351 if(Objets[iPos]->Type == XML_TYPE_SPECIAL)
00352 return Data;
00353
00354 return NULL;
00355 };
|
|
|
Retourne le type de l'objet Type.
Définition à la ligne 153 du fichier XMLObjet.h. Référencé par Print(). 00154 {
00155 return Type;
00156 };
|
|
||||||||||||
|
Charge un fichier XML en mémoire.
Définition à la ligne 59 du fichier XMLObjet.cpp. Références Add(), AddParam(), BEGIN, CERROR, ENDBEGIN, File, GetSousObjet(), IsAlphaNumCar(), LOC, LogError(), PERROR, TRY, et TRYNIF. Référencé par XML::Load(). 00060 {
00061 char TempBuffer[XML_BUFFER];
00062 char TempName[XML_NAME];
00063 char TempName2[XML_NAME];
00064 char TempParam[XML_TEMP];
00065 int iName = 0, iName2 = 0, iParam = 0, iBuffer = 0;
00066 int GetString = 0;
00067 char Car = '\0';
00068 int Mode = 0;
00069 printf("\ndebug\n");
00070
00071 BEGIN
00072 LOC("XMLObjet::Load");
00073
00074 TRY if(File)
00075 {
00076 NoLine = iNoLine;
00077 NoCar = iNoCar;
00078
00079 while(!feof(File) && !CERROR && (Mode != XML_CLOSE_CLOSE))
00080 {
00081 TRYNIF(Mode > XML_SPECIAL, ERROR_C_UNKNOW);
00082
00083 TRY Car = (char)fgetc(File);
00084
00085 if(Car == '\n')
00086 {
00087 NoLine++;
00088 NoCar = 0;
00089 }
00090 else
00091 NoCar++;
00092
00093 TRY
00094 {
00095 switch(Car)
00096 {
00097 case '<' :
00098 switch(Mode)
00099 {
00100 case XML_VIERGE :
00101 Mode = XML_OPEN_OPEN;
00102 break;
00103 case XML_OPEN_OPEN :
00104 LogError(NoLine, NoCar, "'<' found, already opened");
00105 break;
00106 case XML_OBJET_NAME :
00107 LogError(NoLine, NoCar, "'<' found, '>' homited");
00108 break;
00109 case XML_PARAM_NAME :
00110 LogError(NoLine, NoCar, "'<' found, parameter value needed");
00111 break;
00112 case XML_PARAM_FOUND :
00113 LogError(NoLine, NoCar, "'<' found, parameter value needed");
00114 break;
00115 case XML_PARAM_DATA :
00116 LogError(NoLine, NoCar, "'<' found, '>' homited");
00117 break;
00118 case XML_OPEN_CLOSE :
00119 TRY if(fseek(File, -1, SEEK_CUR))
00120 {
00121 LogError(NoLine, NoCar, "Repositioning seek for new objet");
00122 CERROR = 17;
00123 }
00124 TRY NoCar--;
00125 TRY CERROR = Add();
00126 TRY GetSousObjet(NbObjet - 1)->Load(NoLine, NoCar);
00127 TRY Mode = XML_DATA;
00128 break;
00129 case XML_DATA :
00130 if(!GetString)
00131 {
00132 Type = XML_TYPE_DATA;
00133 TempBuffer[iBuffer] = '\0';
00134 Size = strlen(TempBuffer);
00135 Data = (char *)malloc(sizeof(char) * (Size + 1));
00136 strcpy(Data, TempBuffer);
00137 Mode = XML_CLOSE_OPEN;
00138 }
00139 else
00140 LogError(NoLine, NoCar, "'<' found, '\"' not closed");
00141 break;
00142 case XML_CLOSE_OPEN :
00143 LogError(NoLine, NoCar, "'<' found, already opened");
00144 break;
00145 case XML_CLOSE_FOUND :
00146 LogError(NoLine, NoCar, "'<' found, '>' homited");
00147 break;
00148 case XML_CLOSE_CLOSE :
00149 LogError(NoLine, NoCar, "'<' found, parsing error, object not closed");
00150 break;
00151 case XML_SPECIAL :
00152 LogError(NoLine, NoCar, "'<' found, '>' homited");
00153 break;
00154 }
00155 break;
00156
00157 case '>' :
00158 switch(Mode)
00159 {
00160 case XML_VIERGE :
00161 LogError(NoLine, NoCar, "'>' found, '<' homited");
00162 break;
00163 case XML_OPEN_OPEN :
00164 LogError(NoLine, NoCar, "'>' found, homited object name");
00165 break;
00166 case XML_OBJET_NAME :
00167 TempName[iName] = '\0';
00168 strcpy(Name, TempName);
00169 Mode = XML_OPEN_CLOSE;
00170 break;
00171 case XML_PARAM_NAME :
00172 LogError(NoLine, NoCar, "'>' found, homited parameter value");
00173 break;
00174 case XML_PARAM_FOUND :
00175 LogError(NoLine, NoCar, "'>' found, homited parameter value");
00176 break;
00177 case XML_PARAM_DATA :
00178 if(!GetString)
00179 {
00180 TempParam[iParam] = '\0';
00181 TempBuffer[iBuffer] = '\0';
00182 AddParam(TempParam, TempBuffer);
00183 Mode = XML_OPEN_CLOSE;
00184 }
00185 else
00186 LogError(NoLine, NoCar, "'>' found, '\"' not close");
00187 break;
00188 case XML_OPEN_CLOSE :
00189 LogError(NoLine, NoCar, "'>' found, already closed");
00190 break;
00191 case XML_DATA :
00192 LogError(NoLine, NoCar, "'>' found, '<' homited");
00193 break;
00194 case XML_CLOSE_OPEN :
00195 LogError(NoLine, NoCar, "'>' found, homited '/'");
00196 break;
00197 case XML_CLOSE_FOUND :
00198 TempName2[iName2] = '\0';
00199 if(!strcmp(TempName2, TempName))
00200 Mode = XML_CLOSE_CLOSE;
00201 else
00202 LogError(NoLine, NoCar, "Objet's name dont match");
00203 break;
00204 case XML_CLOSE_CLOSE :
00205 LogError(NoLine, NoCar, "'>' found, objet not closed");
00206 break;
00207 case XML_SPECIAL :
00208 Type = XML_TYPE_SPECIAL;
00209 TempBuffer[iBuffer] = '\0';
00210 Size = strlen(TempBuffer);
00211 Data = (char *)malloc(sizeof(char) * (Size + 1));
00212 strcpy(Data, TempBuffer);
00213 Mode = XML_CLOSE_CLOSE;
00214 break;
00215 }
00216 break;
00217
00218 case ' ' :
00219 switch(Mode)
00220 {
00221 case XML_OBJET_NAME :
00222 TempName[iName] = '\0';
00223 strcpy(Name, TempName);
00224 iParam = 0;
00225 Mode = XML_PARAM_NAME;
00226 break;
00227 case XML_PARAM_DATA :
00228 if(!GetString)
00229 {
00230 TempParam[iParam] = '\0';
00231 TempBuffer[iBuffer] = '\0';
00232 AddParam(TempParam, TempBuffer);
00233 iParam = 0;
00234 Mode = XML_PARAM_NAME;
00235 }
00236 else
00237 TempBuffer[iBuffer++] = Car;
00238 break;
00239 case XML_DATA :
00240 TempBuffer[iBuffer++] = Car;
00241 break;
00242 case XML_SPECIAL :
00243 TempBuffer[iBuffer++] = Car;
00244 break;
00245 }
00246 break;
00247
00248 case '=' :
00249 if(Mode == XML_PARAM_NAME)
00250 Mode = XML_PARAM_FOUND;
00251 else
00252 {
00253 if(GetString || (Mode == XML_SPECIAL))
00254 TempBuffer[iBuffer++] = Car;
00255 else
00256 LogError(NoLine, NoCar, "'=' found without parameter");
00257 }
00258 break;
00259
00260 case '/' :
00261 switch(Mode)
00262 {
00263 case XML_OBJET_NAME :
00264 Mode = XML_CLOSE_FOUND;
00265 break;
00266 case XML_PARAM_DATA :
00267 Mode = XML_CLOSE_FOUND;
00268 break;
00269 case XML_CLOSE_OPEN :
00270 Mode = XML_CLOSE_FOUND;
00271 break;
00272 default :
00273 if(GetString || (Mode == XML_SPECIAL))
00274 TempBuffer[iBuffer++] = Car;
00275 else
00276 LogError(NoLine, NoCar, "'/' found, '<' homited");
00277 break;
00278 }
00279 break;
00280
00281 case '\"':
00282 switch(Mode)
00283 {
00284 case XML_PARAM_FOUND :
00285 if(!GetString)
00286 {
00287 iBuffer = 0;
00288 GetString = 1;
00289 }
00290 break;
00291 case XML_PARAM_DATA :
00292 if(GetString)
00293 {
00294 GetString = 0;
00295 TempParam[iParam] = '\0';
00296 TempBuffer[iBuffer] = '\0';
00297 AddParam(TempParam, TempBuffer);
00298 }
00299 else
00300 LogError(NoLine, NoCar, "'\"' found but not opened");
00301 break;
00302 case XML_OPEN_CLOSE :
00303 iBuffer = 0;
00304 TempBuffer[iBuffer++] = Car;
00305 Mode = XML_DATA;
00306 break;
00307 case XML_DATA :
00308 TempBuffer[iBuffer++] = Car;
00309 break;
00310 case XML_SPECIAL :
00311 TempBuffer[iBuffer++] = Car;
00312 break;
00313 default :
00314 LogError(NoLine, NoCar, "'\"' found");
00315 }
00316 break;
00317
00318 default :
00319 switch(Mode)
00320 {
00321 case XML_VIERGE :
00322 LogError(NoLine, NoCar, "no object opened");
00323 break;
00324 case XML_OPEN_OPEN :
00325 if(IsAlphaNumCar(Car))
00326 {
00327 iName = 0;
00328 TempName[iName++] = Car;
00329 Mode = XML_OBJET_NAME;
00330 }
00331 else
00332 {
00333 iBuffer = 0;
00334 TempBuffer[iBuffer++] = Car;
00335 Mode = XML_SPECIAL;
00336 }
00337 break;
00338 case XML_OBJET_NAME :
00339 if(IsAlphaNumCar(Car) || (Car == ':'))
00340 TempName[iName++] = Car;
00341 else
00342 LogError(NoLine, NoCar, "alphanum char only in name");
00343 break;
00344 case XML_PARAM_NAME :
00345 if(IsAlphaNumCar(Car))
00346 TempParam[iParam++] = Car;
00347 else
00348 LogError(NoLine, NoCar, "alphanum char only in name");
00349 break;
00350 case XML_PARAM_FOUND :
00351 iBuffer = 0;
00352 TempBuffer[iBuffer++] = Car;
00353 Mode = XML_PARAM_DATA;
00354 break;
00355 case XML_PARAM_DATA :
00356 TempBuffer[iBuffer++] = Car;
00357 break;
00358 case XML_OPEN_CLOSE :
00359 iBuffer = 0;
00360 TempBuffer[iBuffer++] = Car;
00361 Mode = XML_DATA;
00362 break;
00363 case XML_DATA :
00364 TempBuffer[iBuffer++] = Car;
00365 iName2 = 0;
00366 break;
00367 case XML_CLOSE_OPEN :
00368 LogError(NoLine, NoCar, "/ homited");
00369 break;
00370 case XML_CLOSE_FOUND :
00371 if(IsAlphaNumCar(Car) || (Car == ':'))
00372 TempName2[iName2++] = Car;
00373 else
00374 LogError(NoLine, NoCar, "alphanum char only in name");
00375 break;
00376 case XML_CLOSE_CLOSE :
00377 LogError(NoLine, NoCar, "objet was closed");
00378 break;
00379 case XML_SPECIAL :
00380 TempBuffer[iBuffer++] = Car;
00381 break;
00382 }
00383 } //switch(Car)
00384 } //TRY
00385 else
00386 LogError(NoLine, NoCar, "Reading char");
00387 } //while(...)
00388 } //if(File)
00389 else
00390 LogError(NoLine, NoCar, "The file descriptor is closed");
00391
00392 PERROR
00393
00394 ENDBEGIN
00395 }
|
|
|
Log une erreur de parsage dans le fichier XMLError.log.
Référencé par Load(). |
|
|
Affiche la structure des objets vers le fichier File.
Définition à la ligne 403 du fichier XMLObjet.cpp. Références BEGIN, CERROR, ENDBEGIN, File, GetSousObjet(), GetType(), LOC, PERROR, Print(), et TRY. 00404 {
00405 int i;
00406 BEGIN
00407 LOC("XMLObjet::Print");
00408
00409 TRY if(File)
00410 {
00411 for(i = 0; i < iDec; i++)
00412 fputc('\t', File);
00413 fprintf(File, "%s\n", Name);
00414
00415 for(i = 0; i < Size; i++)
00416 {
00417 TRY if(GetSousObjet(i)->GetType() == XML_TYPE_OBJET)
00418 {
00419 TRY CERROR = GetSousObjet(i)->Print();
00420 }
00421 }
00422 }
00423
00424 PERROR
00425
00426 ENDBEGIN
00427 }
|
|
|
Enregistre la structure des objets dans le fichier pFileName.
Réimplémentée dans XML. Référencé par Print(), et XML::Print(). |
|
|
Poursuit la sauvegarde vers le fichier.
Définition à la ligne 397 du fichier XMLObjet.cpp. Référencé par XML::Save(). 00398 {
00399
00400 return 0;
00401 }
|
|
|
Définie le nom de l'objet Name.
Définition à la ligne 174 du fichier XMLObjet.h. 00175 {
00176 for(int i = 0; (i < (XML_NAME - 1)) && pName[i]; i++)
00177 Name[i] = pName[i];
00178
00179 return Name;
00180 };
|
|
|
Descripteur du fichier destination. Définition à la ligne 14 du fichier XMLObjet.cpp. |
|
|
Nom du fichier. Définition à la ligne 87 du fichier XMLObjet.h. |
|
|
Compte les instance de la class. |
|
|
Utiliser des que l'on accede à un fichier. |
1.3.9.1