summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Habets <thomas@habets.se>2021-03-02 14:14:55 +0000
committermormj <34754695+mormj@users.noreply.github.com>2021-03-03 08:28:15 -0500
commit42dd2c9ccb6128b80b4f2f8c0f5711d8103cfbd6 (patch)
tree01acd9bfa00e2ddaeded7b34a0cabf21cc811b19
parent129a17a01fa12c3b65fc14c54bb08ea5c6817217 (diff)
dtv: Remove manual memory management
Signed-off-by: Thomas Habets <thomas@habets.se>
-rw-r--r--gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc6
-rw-r--r--gr-dtv/lib/dvb/dvb_ldpc_bb_impl.h16
2 files changed, 13 insertions, 9 deletions
diff --git a/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc b/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc
index b401dd8d9e..8acd41b962 100644
--- a/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc
+++ b/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.cc
@@ -353,11 +353,7 @@ dvb_ldpc_bb_impl::dvb_ldpc_bb_impl(dvb_standard_t standard,
/*
* Our virtual destructor.
*/
-dvb_ldpc_bb_impl::~dvb_ldpc_bb_impl()
-{
- delete[] ldpc_lut[0];
- delete[] ldpc_lut;
-}
+dvb_ldpc_bb_impl::~dvb_ldpc_bb_impl() {}
void dvb_ldpc_bb_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required)
{
diff --git a/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.h b/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.h
index 1b43d12eb4..70ad5edc2b 100644
--- a/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.h
+++ b/gr-dtv/lib/dvb/dvb_ldpc_bb_impl.h
@@ -35,7 +35,8 @@ private:
int ldpc_lut_index[FRAME_SIZE_NORMAL];
void ldpc_lookup_generate(void);
- uint16_t** ldpc_lut;
+ std::vector<uint16_t*> ldpc_lut; // Pointers into ldpc_lut_data.
+ std::vector<uint16_t> ldpc_lut_data;
template <typename entry_t, size_t rows, size_t cols>
void ldpc_bf(entry_t (&table)[rows][cols])
@@ -75,9 +76,10 @@ private:
* see
* https://stackoverflow.com/questions/29375797/copy-2d-array-using-memcpy/29375830#29375830
*/
- ldpc_lut = new uint16_t*[pbits];
- ldpc_lut[0] = new uint16_t[pbits * max_lut_arraysize];
- ldpc_lut[0][0] = 1;
+ ldpc_lut.resize(pbits);
+ ldpc_lut_data.resize(pbits * max_lut_arraysize);
+ ldpc_lut_data[0] = 1;
+ ldpc_lut[0] = ldpc_lut_data.data();
for (unsigned int i = 1; i < pbits; i++) {
ldpc_lut[i] = ldpc_lut[i - 1] + max_lut_arraysize;
ldpc_lut[i][0] = 1;
@@ -164,6 +166,12 @@ public:
dvb_constellation_t constellation);
~dvb_ldpc_bb_impl() override;
+ // Disallow copy/move because of the raw pointers.
+ dvb_ldpc_bb_impl(const dvb_ldpc_bb_impl&) = delete;
+ dvb_ldpc_bb_impl(dvb_ldpc_bb_impl&&) = delete;
+ dvb_ldpc_bb_impl& operator=(const dvb_ldpc_bb_impl&) = delete;
+ dvb_ldpc_bb_impl& operator=(dvb_ldpc_bb_impl&&) = delete;
+
void forecast(int noutput_items, gr_vector_int& ninput_items_required) override;
int general_work(int noutput_items,