// // distribution.cpp // shared_random_generator // // Created by Sam Jaffe on 3/25/23. // Copyright © 2023 Sam Jaffe. All rights reserved. // #include "random/distribution.h" #include #include #include "random/device.h" namespace engine::random { template Uniform::Uniform(Rand min) : Uniform(min, std::numeric_limits::max()) {} template Uniform::Uniform(Rand min, Rand max) : min_(min), max_(max) {} template auto Uniform::operator()(Device & device) const -> result_type { if constexpr (std::is_floating_point_v) { return std::uniform_real_distribution(min_, max_)(device); } else { return std::uniform_int_distribution(min_, max_)(device); } } template void Uniform::describe(std::ostream & os) const { constexpr char close = std::is_floating_point_v ? ')' : ']'; os << "Uniform[" << min_ << ',' << max_ << close; } template class Uniform; template class Uniform; template class Uniform; template class Uniform; }