///
/// \file GestionMemoire.h
/// Implante un gestionnaire d'allocation de memoire.
/// 
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 12/01/06
///

#ifndef ____GESTIONMEMOIRE____
#define ____GESTIONMEMOIRE____

///
/// Alloue une zone memoire sans initialisation.
///
/// @param size la taille (en octets) de la zone allouee.
/// @return le pointeur sur la zone memoire allouee.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 12/01/06
///
void *myMalloc(int size);

///
/// Alloue une zone memoire avec initialisation à 0x00.
///
/// @param n le nombre d'enregistrements stockables dans la zone.
/// @param size la taille individuelle (en octets) d'un engeristrement.
/// @return le pointeur sur la zone memoire allouee.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 12/01/06
///
void *myCalloc(int n,int size);

///
/// Alloue une zone memoire sans initialisation et avec ou sans message d'echo dans la console.
///
/// @param size la taille (en octets) de la zone allouee.
/// @param aff le booleen demandant ou non le message d'echo.
/// @return le pointeur sur la zone memoire allouee.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 12/01/06
///
void *myMalloc(int size,int aff);

///
/// Alloue une zone memoire avec initialisation a 0x00 et avec ou sans message d'echo dans la console.
///
/// @param n le nombre d'enregistrements stockables dans la zone.
/// @param size la taille individuelle (en octets) d'un engeristrement.
/// @param aff le booleen demandant ou non le message d'echo.
/// @return le pointeur sur la zone memoire allouee.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 12/01/06
///
void *myCalloc(int n,int size,int aff);

///
/// Alloue une zone memoire sans initialisation, avec ou sans message d'echo dans la console et avec renregistrement d'un code d'allocation.
///
/// @param size la taille (en octets) de la zone allouee.
/// @param aff le booleen demandant ou non le message d'echo.
/// @param code le code d'allocation
/// @return le pointeur sur la zone memoire allouee.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 12/01/06
///
void *myMalloc(int size,int aff,int code);

///
/// Alloue une zone memoire avec initialisation a 0x00, avec ou sans message d'echo dans la console et avec renregistrement d'un code d'allocation.
///
/// @param n le nombre d'enregistrements stockables dans la zone.
/// @param size la taille individuelle (en octets) d'un engeristrement.
/// @param aff le booleen demandant ou non le message d'echo.
/// @param code le code d'allocation
/// @return le pointeur sur la zone memoire allouee.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 12/01/06
///
void *myCalloc(int n,int size,int aff,int code);

///
/// Desalloue une zone memoire.
///
/// @param p le pointeur sur la zone desallouee.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 12/01/06
///
void myFree(void *p);

///
/// Retourne la quantite de memoire actuellement allouee.
///
/// @return la quantite de memoire actuellement allouee.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 12/01/06
///
long tailleMemoireAllouee(void);

///
/// Retourne la quantite maximale de memoire allouee au cours de la vie du programme.
///
/// @return la quantite maximale de memoire allouee au cours de la vie du programme.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 12/01/06
///
long tailleMaxMemoireAllouee(void);

///
/// Retourne le nombre de zones de memoire actuellement allouees.
///
/// @return le nombre de zones de memoire actuellement allouees.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 12/01/06
///
long handlesMemoireAlloues(void);

///
/// Retourne le nombre maximum de zones de memoire allouees au cours de la vie du programme.
///
/// @return le nombre maximum de zones de memoire allouees au cours de la vie du programme.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 12/01/06
///
long maxHandlesMemoireAlloues(void);

///
/// Affiche l'ensemble des zones de memoire actuellement allouees.
/// Pour chaque zone :
/// - numero
/// - adresse
/// - taille
/// - code
///
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 12/01/06
///
void affichageEtatMemoire(void);

#endif
