/**
 * \file NombreAleatoire.h
 * Classe de modelisation d'un generateur de nombres aleatoires.
 * 
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */

#ifndef ____NOMBREALEATOIRE____
#define ____NOMBREALEATOIRE____

#include "NombreAleatoireMersenneTwister.h"

/**
 * \class NombreAleatoire
 * Classe de modelisation d'un generateur de nombres aleatoires.
 * 
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */

class NombreAleatoire : public NombreAleatoireMersenneTwister {

  private :
    unsigned long seed;     /**< Le germe du generateur de nombres aleatoires. */

  public :

/**
 * Constructeur d'un objet NombreAleatoire.
 *
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    NombreAleatoire(void);

/**
 * Constructeur d'un objet NombreAleatoire.
 *
 * @param s La valeur d'initialisation du germe du generateur de nombres aleatoires.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    NombreAleatoire(unsigned long s);

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

/**
 * Affectation du germe du generateur de nombres aleatoires.
 *
 * @param s La valeur d'affectation du germe du generateur de nombres aleatoires.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    virtual void init(unsigned long s);

/**
 * Tirage d'un nombre aleatoire entier.
 *
 * @param limite La valeur maximale+1 tiree au sort.
 * @return Un nombre aleatoire entier compris entre 0 et limite-1.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    virtual int rand(int limite);

/**
 * Tirage d'un nombre aleatoire entier.
 *
 * @param limite La valeur maximale+1 tiree au sort.
 * @return Un nombre aleatoire entier compris entre 0 et limite-1.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    virtual long rand(long limite);

/**
 * Tirage d'un nombre aleatoire reel.
 *
 * @param limite La valeur maximale tiree au sort.
 * @return Un nombre aleatoire reel compris entre 0 et limite.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    virtual float rand(float limite);

/**
 * Tirage d'un nombre aleatoire reel.
 *
 * @param limite La valeur maximale tiree au sort.
 * @return Un nombre aleatoire reel compris entre 0 et limite.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    virtual double rand(double limite);

/**
 * Tirage d'un nombre aleatoire reel et reinitialisation du germe du generateur.
 *
 * @param limite La valeur maximale tiree au sort.
 * @param seed La valeur d'affectation du germe du generateur de nombres aleatoires.
 * @return Un nombre aleatoire reel compris entre 0 et limite.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    virtual float rand(float limite,unsigned long seed);

/**
 * Tirage d'un nombre aleatoire reel et reinitialisation du germe du generateur.
 *
 * @param limite La valeur maximale tiree au sort.
 * @param seed La valeur d'affectation du germe du generateur de nombres aleatoires.
 * @return Un nombre aleatoire reel compris entre 0 et limite.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    virtual double rand(double limite,unsigned long seed);

/**
 * Tirage d'un nombre aleatoire reel et reinitialisation du germe du generateur.
 *
 * @param limite La valeur maximale tiree au sort.
 * @param seed La valeur d'affectation du germe du generateur de nombres aleatoires.
 * @return Un nombre aleatoire reel compris entre 0 et limite.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    virtual double rand(double limite,double seed);

/**
 * Tirage d'un nombre aleatoire reel compris entre 0 et 1.
 *
 * @return Un nombre aleatoire reel compris entre 0 et 1.
 * @author Nicolas Janey
 * @author nicolas.janey@univ-fcomte.fr
 * @version 1.0, 01/01/10
 */
    virtual double rand_0_1(void);
};

#endif
