summaryrefslogtreecommitdiff
path: root/boost/utility/detail/minstd_rand.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/utility/detail/minstd_rand.hpp')
-rw-r--r--boost/utility/detail/minstd_rand.hpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/boost/utility/detail/minstd_rand.hpp b/boost/utility/detail/minstd_rand.hpp
new file mode 100644
index 0000000000..6c858f6bf3
--- /dev/null
+++ b/boost/utility/detail/minstd_rand.hpp
@@ -0,0 +1,55 @@
+#ifndef BOOST_UTILITY_DETAIL_MINSTD_RAND_HPP_INCLUDED
+#define BOOST_UTILITY_DETAIL_MINSTD_RAND_HPP_INCLUDED
+
+// Copyright 2017 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0.
+//
+// An implementation of minstd_rand that does not require
+// the Random library
+
+#include <boost/cstdint.hpp>
+
+namespace boost
+{
+namespace detail
+{
+
+class minstd_rand
+{
+private:
+
+ boost::uint_least32_t x_;
+
+ enum { a = 48271, m = 2147483647 };
+
+public:
+
+ minstd_rand(): x_( 1 )
+ {
+ }
+
+ explicit minstd_rand( boost::uint_least32_t x ): x_( x % m )
+ {
+ if( x_ == 0 )
+ {
+ x_ = 1;
+ }
+ }
+
+ boost::uint_least32_t operator()()
+ {
+ boost::uint_least64_t y = x_;
+
+ y = ( a * y ) % m;
+
+ x_ = static_cast<boost::uint_least32_t>( y );
+
+ return x_;
+ }
+};
+
+} // namespace detail
+} // namespace boost
+
+#endif // #ifndef BOOST_UTILITY_DETAIL_MINSTD_RAND_HPP_INCLUDED