///
/// \file XMLTag.h
/// Classe de description d'un tag de structure XML.
/// 
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
/// 

#ifndef ____XMLTAG____
#define ____XMLTAG____

class XMLTag;
class XMLProperty;

///
/// \class XMLTag
/// Classe de description d'un tag de structure XML.
/// 
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
/// 

class XMLTag {

  public :
    char *name;                ///< Le nom.
    short nbProprietes;        ///< Le nombre de proprietes.
    XMLProperty **proprietes;  ///< Le tableau des proprietes du tag.
    int nbTags;                ///< Le nombre de tags inclus.
    XMLTag **tagList;          ///< Le tableau des tags inclus.
    char **strList;            ///< Le tableau des chaines incluses.
    //char *chaine;              ///< La chaine integree dans le tag.
    short niveau;              ///< Le niveau du tag dans l'arborescence XML.
    int num;                   ///< Le numero dans la liste de tag auquel il appartient.
  
  private :
    char dynamique;            ///< Le booleen indiquant si l'allocation des champs est dynamique ou non.

  public :	

///
/// Constructeur pour un nouvel objet XMLTag.
///
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
/// 
    XMLTag(void);

///
/// Constructeur pour un nouvel objet XMLTag.
///
/// @param filename Le nom du fichier de chargement.
/// @param ts Le tableau des chaines de caracteres de recherche.
/// @param ns Le nombre de  chaines de caracteres de recherche.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
/// 
    XMLTag(char *filename,char **ts,int ns);

///
/// Destructeur pour un objet XMLTag.
///
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
/// 
    ~XMLTag();

///
/// Retour du premier tag inclu portant un nom.
///
/// @param name Le nom du tag inclu recherche.
/// @return Le tag inclu (NULL si non trouve).
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
/// 
    XMLTag *getFirstTag(char *name);

///
/// Retour du prochain tag inclu portant le meme nom qu'un tag.
///
/// @param tag Le tag de debut de recherche.
/// @return Le tag inclu (NULL si non trouve).
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
/// 
    XMLTag *getNextTag(XMLTag *tag);

///
/// Retour de la valeur une propriete.
///
/// @param name Le nom de la propriete recherchee.
/// @return La chaine valeur (NULL si non trouve).
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
/// 
    char *getProperty(char *name);

///
/// Retour de la quantite de memoire utilisee.
///
/// @return la quantite de memoire.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    size_t getUsedMemory(void);

///
/// Retour du nombre de handles memoires utilises.
///
/// @return le nombre de handles memoires.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///
    long getUsedHandles(void);
};

#endif
