random_number_generator

TR1の擬似乱数生成器でrandom_shuffle

まじめに作ったらそのままBoostになっちゃいました。。。

template<class Engine, class IntType = long>
class random_number_generator {
public:
    typedef Engine  base_type;
    typedef IntType argument_type;
    typedef IntType result_type;

    random_number_generator(base_type& engine) : engine_(engine) {}

    result_type operator()(argument_type value)
    {
        typedef std::tr1::uniform_int<IntType> dist_type;
        return std::tr1::variate_generator<base_type&, dist_type>(engine_, dist_type(0, value-1))();
    }

private:
    base_type& engine_;
};