summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Müller <mmueller@gnuradio.org>2019-10-05 22:11:29 +0200
committerMartin Braun <martin.braun@ettus.com>2020-01-02 18:06:50 -0800
commit32fdc512104cbbf5ab7d5e6d083e7843bca0e36b (patch)
tree98fc27f3741ec7776af8868a4309eadcff763138
parent69a9ecf48971a352ddb1308efc4314b2dd79bd55 (diff)
message_strobe_random: replace boost::random with C++11
-rw-r--r--gr-blocks/lib/message_strobe_random_impl.cc53
-rw-r--r--gr-blocks/lib/message_strobe_random_impl.h45
2 files changed, 38 insertions, 60 deletions
diff --git a/gr-blocks/lib/message_strobe_random_impl.cc b/gr-blocks/lib/message_strobe_random_impl.cc
index fa7dcf9ae5..a719dc8829 100644
--- a/gr-blocks/lib/message_strobe_random_impl.cc
+++ b/gr-blocks/lib/message_strobe_random_impl.cc
@@ -49,17 +49,17 @@ message_strobe_random_impl::message_strobe_random_impl(
: block("message_strobe_random",
io_signature::make(0, 0, 0),
io_signature::make(0, 0, 0)),
- d_finished(false),
+ d_rng(),
d_mean_ms(mean_ms),
d_std_ms(std_ms),
d_dist(dist),
+ pd(d_mean_ms),
+ nd(d_mean_ms, d_std_ms),
+ ud(d_mean_ms - d_std_ms, d_mean_ms + d_std_ms),
+ d_finished(false),
d_msg(msg),
- d_rng(),
d_port(pmt::mp("strobe"))
{
- // allocate RNGs
- update_dist();
-
// set up ports
message_port_register_out(d_port);
d_thread = boost::shared_ptr<gr::thread::thread>(
@@ -70,42 +70,39 @@ message_strobe_random_impl::message_strobe_random_impl(
boost::bind(&message_strobe_random_impl::set_msg, this, _1));
}
+void message_strobe_random_impl::set_mean(float mean_ms)
+{
+ d_mean_ms = mean_ms;
+ pd = std::poisson_distribution<>(d_mean_ms);
+ nd = std::normal_distribution<>(d_mean_ms, d_std_ms);
+ ud = std::uniform_real_distribution<>(d_mean_ms - d_std_ms, d_mean_ms + d_std_ms);
+}
+
+float message_strobe_random_impl::mean() const { return d_mean_ms; }
+
+void message_strobe_random_impl::set_std(float std_ms)
+{
+ d_std_ms = std_ms;
+ nd = std::normal_distribution<>(d_mean_ms, d_std_ms);
+ ud = std::uniform_real_distribution<>(d_mean_ms - d_std_ms, d_mean_ms + d_std_ms);
+}
+
long message_strobe_random_impl::next_delay()
{
switch (d_dist) {
case STROBE_POISSON:
// return d_variate_poisson->operator()();
- return static_cast<long>(d_variate_poisson->operator()());
+ return static_cast<long>(pd(d_rng));
case STROBE_GAUSSIAN:
- return static_cast<long>(d_variate_normal->operator()());
+ return static_cast<long>(nd(d_rng));
case STROBE_UNIFORM:
- return static_cast<long>(d_variate_uniform->operator()());
+ return static_cast<long>(ud(d_rng));
default:
throw std::runtime_error(
"message_strobe_random_impl::d_distribution is very unhappy with you");
}
}
-void message_strobe_random_impl::update_dist()
-{
- boost::poisson_distribution<> pd(d_mean_ms);
- d_variate_poisson = boost::shared_ptr<
- boost::variate_generator<boost::mt19937, boost::poisson_distribution<>>>(
- new boost::variate_generator<boost::mt19937, boost::poisson_distribution<>>(d_rng,
- pd));
-
- boost::normal_distribution<> nd(d_mean_ms, d_std_ms);
- d_variate_normal = boost::shared_ptr<
- boost::variate_generator<boost::mt19937, boost::normal_distribution<>>>(
- new boost::variate_generator<boost::mt19937, boost::normal_distribution<>>(d_rng,
- nd));
-
- boost::uniform_real<> ud(d_mean_ms - d_std_ms, d_mean_ms + d_std_ms);
- d_variate_uniform = boost::shared_ptr<
- boost::variate_generator<boost::mt19937, boost::uniform_real<>>>(
- new boost::variate_generator<boost::mt19937, boost::uniform_real<>>(d_rng, ud));
-}
-
message_strobe_random_impl::~message_strobe_random_impl()
{
diff --git a/gr-blocks/lib/message_strobe_random_impl.h b/gr-blocks/lib/message_strobe_random_impl.h
index 77eaa005e5..40c46803d1 100644
--- a/gr-blocks/lib/message_strobe_random_impl.h
+++ b/gr-blocks/lib/message_strobe_random_impl.h
@@ -24,11 +24,8 @@
#define INCLUDED_GR_MESSAGE_STROBE_RANDOM_IMPL_H
#include <gnuradio/blocks/message_strobe_random.h>
-#include <boost/random/mersenne_twister.hpp>
-#include <boost/random/normal_distribution.hpp>
-#include <boost/random/poisson_distribution.hpp>
-#include <boost/random/uniform_real.hpp>
-#include <boost/random/variate_generator.hpp>
+
+#include <random>
namespace gr {
namespace blocks {
@@ -36,28 +33,20 @@ namespace blocks {
class BLOCKS_API message_strobe_random_impl : public message_strobe_random
{
private:
- boost::shared_ptr<gr::thread::thread> d_thread;
- bool d_finished;
+ std::mt19937 d_rng;
float d_mean_ms;
float d_std_ms;
message_strobe_random_distribution_t d_dist;
+ std::poisson_distribution<> pd; //(d_mean_ms);
+ std::normal_distribution<> nd; //(d_mean_ms, d_std_ms);
+ std::uniform_real_distribution<> ud; //(d_mean_ms - d_std_ms, d_mean_ms + d_std_ms);
+ boost::shared_ptr<gr::thread::thread> d_thread;
+ bool d_finished;
pmt::pmt_t d_msg;
- void run();
- long next_delay();
-
- boost::mt19937 d_rng;
- boost::shared_ptr<
- boost::variate_generator<boost::mt19937, boost::poisson_distribution<>>>
- d_variate_poisson;
- boost::shared_ptr<
- boost::variate_generator<boost::mt19937, boost::normal_distribution<>>>
- d_variate_normal;
- boost::shared_ptr<boost::variate_generator<boost::mt19937, boost::uniform_real<>>>
- d_variate_uniform;
-
const pmt::pmt_t d_port;
- void update_dist();
+ void run();
+ long next_delay();
public:
message_strobe_random_impl(pmt::pmt_t msg,
@@ -68,17 +57,9 @@ public:
void set_msg(pmt::pmt_t msg) { d_msg = msg; }
pmt::pmt_t msg() const { return d_msg; }
- void set_mean(float mean_ms)
- {
- d_mean_ms = mean_ms;
- update_dist();
- }
- float mean() const { return d_mean_ms; }
- void set_std(float std_ms)
- {
- d_std_ms = std_ms;
- update_dist();
- }
+ void set_mean(float mean_ms);
+ float mean() const;
+ void set_std(float std_ms);
float std() const { return d_std_ms; }
void set_dist(message_strobe_random_distribution_t dist) { d_dist = dist; }
message_strobe_random_distribution_t dist() const { return d_dist; }