blob: c64c39de531caebe45a41831356350225f909d7b [file] [log] [blame]
/* ----------------------------------------------------------------------- *//**
*
* @file NativeRandomNumberGenerator_impl.hpp
*
*//* ----------------------------------------------------------------------- */
#ifndef MADLIB_POSTGRES_NATIVERANDOMNUMBERGENERATOR_IMPL_HPP
#define MADLIB_POSTGRES_NATIVERANDOMNUMBERGENERATOR_IMPL_HPP
namespace madlib {
namespace dbconnector {
namespace postgres {
inline
NativeRandomNumberGenerator::NativeRandomNumberGenerator() { }
/**
* @brief Sets the current state of the engine
*
* All this function does is calling the backend's seed functions.
*/
inline
void
NativeRandomNumberGenerator::seed(result_type inSeed) {
DirectFunctionCall1(setseed, Float8GetDatum(inSeed));
}
/**
* @brief Advances the engine's state and returns the generated value
*/
inline
NativeRandomNumberGenerator::result_type
NativeRandomNumberGenerator::operator()() {
// There seems to be no DirectFunctionCall0().
return DatumGetFloat8(DirectFunctionCall1(drandom, Datum(0)));
}
/**
* @brief Return tight lower bound on the set of all values returned by
* <tt>operator()</tt>
*/
inline
NativeRandomNumberGenerator::result_type
NativeRandomNumberGenerator::min() {
return 0.0;
}
/**
* @brief Return smallest representable number larger than maximum of all values
* returned by <tt>operator()</tt>
*
* Boost specifies, if \c result_type is not integer, then return "the smallest
* representable number larger than the tight upper bound on the set of all
* values returned by operator(). In any case, the return value of this function
* shall not change during the lifetime of the object."
* http://www.boost.org/doc/libs/1_50_0/doc/html/boost_random/reference.html
*/
inline
NativeRandomNumberGenerator::result_type
NativeRandomNumberGenerator::max() {
return 1.0;
}
} // namespace postgres
} // namespace dbconnector
} // namespace madlib
#endif // defined(MADLIB_POSTGRES_NATIVERANDOMNUMBERGENERATOR_IMPL_HPP)