#ifndef __CRand_hxx__
#define __CRand_hxx__

#include <stdlib.h>
#include <time.h>


// Encapsulation du bon vieux rand
// dans un objet foncteur
//
// La racine est conservee dans la classe
//
// Si le constructeur est appelle avec 0 comme racine
// cette derniere est choisie respectivement a l'horloge
//
// Cette classe montre comment l'on peut adapter 
// du bon vieux stuff a la STL !
// c'est une forme faible du pattern adapter :)

class CRand
{
  private:
    int racine_;
  public:

    explicit CRand(int laRacine=0)
    {
      if (laRacine)
	    reset(laRacine);
      else
        reset(time(0));
    }

	void reset(int nouvelleRacine)
	{
	  racine_=nouvelleRacine;
	  srand(racine_);
	}

    double operator() ()
    {
      return static_cast<double>(rand())/(RAND_MAX);
    }

    int racine()
    {
      return racine_;
    }
};
#endif

