diff options
author | Thomas Habets <thomas@habets.se> | 2020-08-29 23:18:16 +0100 |
---|---|---|
committer | Martin Braun <martin@gnuradio.org> | 2020-09-07 05:14:14 -0700 |
commit | d2c9de98b52e7e9a4918190b1e7079496d2a13b6 (patch) | |
tree | 74b9de2495d7e4ab79dd13bbf6338ca2fb1e2501 /gr-fec/lib/cc_decoder_impl.cc | |
parent | 0d1d600ab622075a4e56e66642e67fc5c983450e (diff) |
fec: Remove manual memory management
This removes almost all manual memory management in gr-fec/.
`scl_list` is a bit of magic, so requires more thinking.
Diffstat (limited to 'gr-fec/lib/cc_decoder_impl.cc')
-rw-r--r-- | gr-fec/lib/cc_decoder_impl.cc | 42 |
1 files changed, 10 insertions, 32 deletions
diff --git a/gr-fec/lib/cc_decoder_impl.cc b/gr-fec/lib/cc_decoder_impl.cc index 2ff08e018d..21062e4f41 100644 --- a/gr-fec/lib/cc_decoder_impl.cc +++ b/gr-fec/lib/cc_decoder_impl.cc @@ -98,26 +98,13 @@ cc_decoder_impl::cc_decoder_impl(int frame_size, throw std::runtime_error("cc_decoder: mode not recognized"); } - d_vp.metrics = (unsigned char*)volk_malloc(2 * sizeof(unsigned char) * d_numstates, - volk_get_alignment()); - if (d_vp.metrics == NULL) { - throw std::runtime_error("bad alloc for d_vp.metrics!"); - } - - d_vp.metrics1.t = d_vp.metrics; - d_vp.metrics2.t = d_vp.metrics + d_numstates; + d_vp.metrics.resize(2 * d_numstates); + d_vp.metrics1.t = d_vp.metrics.data(); + d_vp.metrics2.t = d_vp.metrics.data() + d_numstates; - d_vp.decisions = (unsigned char*)volk_malloc( - sizeof(unsigned char) * d_veclen * d_decision_t_size, volk_get_alignment()); - if (d_vp.decisions == NULL) { - throw std::runtime_error("bad alloc for d_vp.decisions!"); - } + d_vp.decisions.resize(d_veclen * d_decision_t_size); - Branchtab = (unsigned char*)volk_malloc( - sizeof(unsigned char) * d_numstates / 2 * rate, volk_get_alignment()); - if (Branchtab == NULL) { - throw std::runtime_error("bad alloc for d_vp.decisions!"); - } + d_branchtab.resize(d_numstates / 2 * rate); create_viterbi(); @@ -147,12 +134,7 @@ cc_decoder_impl::cc_decoder_impl(int frame_size, } } -cc_decoder_impl::~cc_decoder_impl() -{ - volk_free(d_vp.decisions); - volk_free(Branchtab); - volk_free(d_vp.metrics); -} +cc_decoder_impl::~cc_decoder_impl() {} int cc_decoder_impl::get_output_size() { @@ -191,7 +173,7 @@ void cc_decoder_impl::create_viterbi() partab_init(); for (state = 0; state < d_numstates / 2; state++) { for (i = 0; i < d_rate; i++) { - Branchtab[i * d_numstates / 2 + state] = + d_branchtab[i * d_numstates / 2 + state] = (d_polys[i] < 0) ^ parity((2 * state) & abs(d_polys[i])) ? 255 : 0; } } @@ -297,9 +279,7 @@ int cc_decoder_impl::find_endstate() int cc_decoder_impl::update_viterbi_blk(unsigned char* syms, int nbits) { - unsigned char* d; - - d = d_vp.decisions; + unsigned char* d = d_vp.decisions.data(); memset(d, 0, d_decision_t_size * nbits); @@ -309,7 +289,7 @@ int cc_decoder_impl::update_viterbi_blk(unsigned char* syms, int nbits) d, nbits - (d_k - 1), d_k - 1, - Branchtab); + d_branchtab.data()); return 0; } @@ -319,10 +299,8 @@ int cc_decoder_impl::chainback_viterbi(unsigned char* data, unsigned int endstate, unsigned int tailsize) { - unsigned char* d; - /* ADDSHIFT and SUBSHIFT make sure that the thing returned is a byte. */ - d = d_vp.decisions; + unsigned char* d = d_vp.decisions.data(); /* Make room beyond the end of the encoder register so we can * accumulate a full byte of decoded data */ |