/**
 * \file AllocateurMemoire.h
 * Classe de gestion d'un allocateur de bancs memoire.
 * 
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */

#ifndef ____ALLOCATEURMEMOIRE____
#define ____ALLOCATEURMEMOIRE____

class AllocateurMemoire;

/**
 * \class AllocateurMemoire
 * Classe de gestion d'un allocateur de bancs memoire.
 * 
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */

class AllocateurMemoire {

  public :

/**
 * Constructeur pour un objet AllocateurMemoire.
 *
 * @param size La taille d'allocation pour les bancs memoire.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    AllocateurMemoire(int size);

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

/**
 * Allocation d'un banc memoire.
 *
 * @param taille La taille du banc memoire a allouer.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    void *myalloc(int taille);

/**
 * Allocation d'un banc memoire.
 *
 * @param nb Le nombre d'elements a allouer.
 * @param taille La taille de chaque element a allouer.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    void *cyalloc(int nb,int taille);

/**
 * Desallocation du dernier banc memoire alloue.
 *
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    int stepBack(void);

/**
 * Retour du nombre de bancs memoire alloues.
 *
 * @return Le nombre de bancs memoire alloues.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    int getNombreAllocations(void);

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

/**
 * Retour du nombre de handle memoire occupes par this.
 *
 * @return Le nombre de handle memoire occupes par this.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    long getUsedHandles(void);

  private :
    int size;
    char **t;
    int sp;
    int spt;
    int bck;
    int nb;
    int lsp;
    int lspt;
    size_t *tm;

  private :
    void liberation(void);
};

#endif
