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

#ifndef ____XMLSTRUCTURE____
#define ____XMLSTRUCTURE____

class XMLTag;
class AllocateurMemoire;
class AllocateurXMLTag;
class AllocateurXMLProperty;
class Vector;
class Exclusions;
class Inclusions;

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

class XMLStructure {

  public :
    XMLTag *tag;          ///< Le tag racine.

  public :	

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

///
/// Constructeur pour un nouvel objet XMLStructure.
///
/// @param filename Le nom du fichier de chargement.
/// @param exclusions Les exclusions de chargement.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
/// 
    XMLStructure(char *filename);

///
/// Constructeur pour un nouvel objet XMLStructure.
///
/// @param filename Le nom du fichier de chargement.
/// @param exclusions Les exclusions de chargement.
/// @param texteInline Le booleen de chargement du texte present entre les tags.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
/// 
    XMLStructure(char *filename,Exclusions *exclusions,int texteInline);

///
/// Constructeur pour un nouvel objet XMLStructure.
///
/// @param filename Le nom du fichier de chargement.
/// @param inclusions Les inclusions de chargement.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
/// 
    XMLStructure(char *filename,Inclusions *inclusions);

///
/// Constructeur pour un nouvel objet XMLStructure.
///
/// @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
/// 
    XMLStructure(char *filename,char **ts,int ns);

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

///
/// Retour du tag racine.
///
/// @return Le tag racine.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
/// 
    XMLTag *getTag(void);

///
/// 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);

    private :
      int gestionMemoire;
      AllocateurMemoire *am;
      AllocateurMemoire *amtt;
      AllocateurMemoire *amtp;
      AllocateurXMLTag *at;
      AllocateurXMLProperty *ap;
};

#endif
