summaryrefslogtreecommitdiff
path: root/gr-trellis/lib/metrics_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-trellis/lib/metrics_impl.cc')
-rw-r--r--gr-trellis/lib/metrics_impl.cc185
1 files changed, 93 insertions, 92 deletions
diff --git a/gr-trellis/lib/metrics_impl.cc b/gr-trellis/lib/metrics_impl.cc
index 1ed6c69803..f3ebb4f5d3 100644
--- a/gr-trellis/lib/metrics_impl.cc
+++ b/gr-trellis/lib/metrics_impl.cc
@@ -32,104 +32,105 @@
#include <iostream>
namespace gr {
- namespace trellis {
-
- template <class T>
- typename metrics<T>::sptr
- metrics<T>::make(int O, int D, const std::vector<T> &TABLE,
- digital::trellis_metric_type_t TYPE)
- {
- return gnuradio::get_initial_sptr
- (new metrics_impl<T>(O,D,TABLE,TYPE));
- }
-
- template <class T>
- metrics_impl<T>::metrics_impl(int O, int D, const std::vector<T> &TABLE,
- digital::trellis_metric_type_t TYPE)
+namespace trellis {
+
+template <class T>
+typename metrics<T>::sptr metrics<T>::make(int O,
+ int D,
+ const std::vector<T>& TABLE,
+ digital::trellis_metric_type_t TYPE)
+{
+ return gnuradio::get_initial_sptr(new metrics_impl<T>(O, D, TABLE, TYPE));
+}
+
+template <class T>
+metrics_impl<T>::metrics_impl(int O,
+ int D,
+ const std::vector<T>& TABLE,
+ digital::trellis_metric_type_t TYPE)
: block("metrics",
- io_signature::make(1, -1, sizeof (T)),
- io_signature::make(1, -1, sizeof (float))),
- d_O(O), d_D(D), d_TYPE(TYPE), d_TABLE(TABLE)
- {
- this->set_relative_rate ((uint64_t)d_O, (uint64_t)d_D);
- this->set_output_multiple ((int)d_O);
- }
-
- template <class T>
- void metrics_impl<T>::set_O(int O)
- {
- gr::thread::scoped_lock guard(this->d_setlock);
- d_O = O;
- this->set_relative_rate ((uint64_t)d_O, (uint64_t)d_D);
- this->set_output_multiple ((int)d_O);
- }
-
- template <class T>
- void metrics_impl<T>::set_D(int D)
- {
- gr::thread::scoped_lock guard(this->d_setlock);
- d_D = D;
- this->set_relative_rate ((uint64_t)d_O, (uint64_t)d_D);
- }
-
- template <class T>
- void
- metrics_impl<T>::set_TYPE(digital::trellis_metric_type_t type)
- {
- gr::thread::scoped_lock guard(this->d_setlock);
- d_TYPE = type;
+ io_signature::make(1, -1, sizeof(T)),
+ io_signature::make(1, -1, sizeof(float))),
+ d_O(O),
+ d_D(D),
+ d_TYPE(TYPE),
+ d_TABLE(TABLE)
+{
+ this->set_relative_rate((uint64_t)d_O, (uint64_t)d_D);
+ this->set_output_multiple((int)d_O);
+}
+
+template <class T>
+void metrics_impl<T>::set_O(int O)
+{
+ gr::thread::scoped_lock guard(this->d_setlock);
+ d_O = O;
+ this->set_relative_rate((uint64_t)d_O, (uint64_t)d_D);
+ this->set_output_multiple((int)d_O);
+}
+
+template <class T>
+void metrics_impl<T>::set_D(int D)
+{
+ gr::thread::scoped_lock guard(this->d_setlock);
+ d_D = D;
+ this->set_relative_rate((uint64_t)d_O, (uint64_t)d_D);
+}
+
+template <class T>
+void metrics_impl<T>::set_TYPE(digital::trellis_metric_type_t type)
+{
+ gr::thread::scoped_lock guard(this->d_setlock);
+ d_TYPE = type;
+}
+
+template <class T>
+void metrics_impl<T>::set_TABLE(const std::vector<T>& table)
+{
+ gr::thread::scoped_lock guard(this->d_setlock);
+ d_TABLE = table;
+}
+
+template <class T>
+metrics_impl<T>::~metrics_impl()
+{
+}
+
+
+template <class T>
+void metrics_impl<T>::forecast(int noutput_items, gr_vector_int& ninput_items_required)
+{
+ int input_required = d_D * noutput_items / d_O;
+ unsigned ninputs = ninput_items_required.size();
+ for (unsigned int i = 0; i < ninputs; i++)
+ ninput_items_required[i] = input_required;
+}
+
+template <class T>
+int metrics_impl<T>::general_work(int noutput_items,
+ gr_vector_int& ninput_items,
+ gr_vector_const_void_star& input_items,
+ gr_vector_void_star& output_items)
+{
+ gr::thread::scoped_lock guard(this->d_setlock);
+ int nstreams = input_items.size();
+
+ for (int m = 0; m < nstreams; m++) {
+ const T* in = (T*)input_items[m];
+ float* out = (float*)output_items[m];
+
+ for (int i = 0; i < noutput_items / d_O; i++) {
+ calc_metric(d_O, d_D, d_TABLE, &(in[i * d_D]), &(out[i * d_O]), d_TYPE);
+ }
}
- template <class T>
- void
- metrics_impl<T>::set_TABLE(const std::vector<T> &table)
- {
- gr::thread::scoped_lock guard(this->d_setlock);
- d_TABLE = table;
- }
-
- template <class T>
- metrics_impl<T>::~metrics_impl()
- {
- }
-
-
- template <class T>
- void
- metrics_impl<T>::forecast(int noutput_items, gr_vector_int &ninput_items_required)
- {
- int input_required = d_D * noutput_items / d_O;
- unsigned ninputs = ninput_items_required.size();
- for(unsigned int i = 0; i < ninputs; i++)
- ninput_items_required[i] = input_required;
- }
-
- template <class T>
- int
- metrics_impl<T>::general_work(int noutput_items,
- gr_vector_int &ninput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
- {
- gr::thread::scoped_lock guard(this->d_setlock);
- int nstreams = input_items.size();
-
- for(int m = 0; m < nstreams; m++) {
- const T *in = (T*)input_items[m];
- float *out = (float*)output_items[m];
-
- for(int i = 0; i < noutput_items / d_O ; i++) {
- calc_metric(d_O, d_D, d_TABLE,&(in[i*d_D]), &(out[i*d_O]), d_TYPE);
- }
- }
-
- this->consume_each(d_D * noutput_items / d_O);
- return noutput_items;
- }
+ this->consume_each(d_D * noutput_items / d_O);
+ return noutput_items;
+}
template class metrics<std::int16_t>;
template class metrics<std::int32_t>;
template class metrics<float>;
template class metrics<gr_complex>;
- } /* namespace trellis */
+} /* namespace trellis */
} /* namespace gr */