#ifndef __RANDOM_H_
#define __RANDOM_H_

#include "Definitions.h"
#include <ctime>

class Random {
  protected:
    Random();
    virtual ~Random();

    static Random *instance;
    template<class ReturnType>
    static ReturnType getSeed() {
      return static_cast<ReturnType>( std::time( 0 ) );
    }

  public:
    static Random * const getInstance();
    static void deleteInstance();
    virtual FloatType get01() = 0;
    virtual FloatType getFloat( FloatType from, FloatType to ) = 0;
    virtual int getInt( int from, int to ) = 0;
};

#endif /* __RANDOM_H_ */
