diff options
-rw-r--r-- | gr-dtv/lib/atsc/atsc_deinterleaver_impl.cc | 17 | ||||
-rw-r--r-- | gr-dtv/lib/atsc/atsc_deinterleaver_impl.h | 8 | ||||
-rw-r--r-- | gr-dtv/lib/atsc/atsc_interleaver_fifo.h | 27 | ||||
-rw-r--r-- | gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc | 15 | ||||
-rw-r--r-- | gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h | 2 | ||||
-rw-r--r-- | gr-dtv/lib/atsc/interleaver_fifo.h | 27 |
6 files changed, 35 insertions, 61 deletions
diff --git a/gr-dtv/lib/atsc/atsc_deinterleaver_impl.cc b/gr-dtv/lib/atsc/atsc_deinterleaver_impl.cc index a906bf8597..fcc5931365 100644 --- a/gr-dtv/lib/atsc/atsc_deinterleaver_impl.cc +++ b/gr-dtv/lib/atsc/atsc_deinterleaver_impl.cc @@ -30,25 +30,22 @@ atsc_deinterleaver_impl::atsc_deinterleaver_impl() io_signature::make(1, 1, sizeof(atsc_mpeg_packet_rs_encoded))), alignment_fifo(156) { - m_fifo.resize(52); + m_fifo.reserve(s_interleavers); - for (int i = 0; i < 52; i++) - m_fifo[52 - 1 - i] = new interleaver_fifo<unsigned char>(i * 4); + for (int i = 0; i < s_interleavers; i++) + m_fifo.emplace_back((52 - 1 - i) * 4); sync(); } -atsc_deinterleaver_impl::~atsc_deinterleaver_impl() -{ - for (int i = 0; i < 52; i++) - delete m_fifo[i]; -} +atsc_deinterleaver_impl::~atsc_deinterleaver_impl() {} void atsc_deinterleaver_impl::reset() { sync(); - for (int i = 0; i < 52; i++) - m_fifo[i]->reset(); + + for (auto& i : m_fifo) + i.reset(); } int atsc_deinterleaver_impl::work(int noutput_items, diff --git a/gr-dtv/lib/atsc/atsc_deinterleaver_impl.h b/gr-dtv/lib/atsc/atsc_deinterleaver_impl.h index c8cefacae4..124775eb9c 100644 --- a/gr-dtv/lib/atsc/atsc_deinterleaver_impl.h +++ b/gr-dtv/lib/atsc/atsc_deinterleaver_impl.h @@ -21,12 +21,14 @@ namespace dtv { class atsc_deinterleaver_impl : public atsc_deinterleaver { private: + static constexpr int s_interleavers = 52; + //! transform a single symbol unsigned char transform(unsigned char input) { - unsigned char retval = m_fifo[m_commutator]->stuff(input); + unsigned char retval = m_fifo[m_commutator].stuff(input); m_commutator++; - if (m_commutator >= 52) + if (m_commutator >= s_interleavers) m_commutator = 0; return retval; } @@ -41,7 +43,7 @@ private: interleaver_fifo<unsigned char> alignment_fifo; int m_commutator; - std::vector<interleaver_fifo<unsigned char>*> m_fifo; + std::vector<interleaver_fifo<unsigned char>> m_fifo; public: atsc_deinterleaver_impl(); diff --git a/gr-dtv/lib/atsc/atsc_interleaver_fifo.h b/gr-dtv/lib/atsc/atsc_interleaver_fifo.h index cdbf01ff5c..32e6da2d12 100644 --- a/gr-dtv/lib/atsc/atsc_interleaver_fifo.h +++ b/gr-dtv/lib/atsc/atsc_interleaver_fifo.h @@ -11,7 +11,8 @@ #ifndef INCLUDED_DTV_ATSC_INTERLEAVER_FIFO_H #define INCLUDED_DTV_ATSC_INTERLEAVER_FIFO_H -#include <string.h> +#include <algorithm> +#include <vector> namespace gr { namespace dtv { @@ -21,7 +22,6 @@ class interleaver_fifo { public: interleaver_fifo(unsigned int size); - ~interleaver_fifo(); //! reset interleaver (flushes contents and resets commutator) void reset(); @@ -29,44 +29,33 @@ public: //! stuff a symbol into the fifo and return the oldest symbol_type stuff(symbol_type input) { - if (m_size == 0) + if (m_fifo.empty()) return input; symbol_type retval = m_fifo[m_position]; m_fifo[m_position] = input; m_position++; - if (m_position >= m_size) + if (m_position >= m_fifo.size()) m_position = 0; return retval; } protected: - unsigned int m_size; - unsigned int m_position; - symbol_type* m_fifo; + unsigned int m_position = 0; + std::vector<symbol_type> m_fifo; }; template <class symbol_type> -interleaver_fifo<symbol_type>::interleaver_fifo(unsigned int size) +interleaver_fifo<symbol_type>::interleaver_fifo(unsigned int size) : m_fifo(size) { - m_size = size; - m_position = 0; - m_fifo = new symbol_type[size]; - memset(m_fifo, 0, m_size * sizeof(symbol_type)); -} - -template <class symbol_type> -interleaver_fifo<symbol_type>::~interleaver_fifo() -{ - delete[] m_fifo; } template <class symbol_type> void interleaver_fifo<symbol_type>::reset() { m_position = 0; - memset(m_fifo, 0, m_size * sizeof(symbol_type)); + std::fill(std::begin(m_fifo), std::end(m_fifo), 0); } } /* namespace dtv */ diff --git a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc index c80731000b..e02649861e 100644 --- a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc +++ b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc @@ -43,23 +43,20 @@ atsc_viterbi_decoder_impl::atsc_viterbi_decoder_impl() */ // the -4 is for the 4 sync symbols - int fifo_size = ATSC_DATA_SEGMENT_LENGTH - 4 - viterbi[0].delay(); + const int fifo_size = ATSC_DATA_SEGMENT_LENGTH - 4 - viterbi[0].delay(); + fifo.reserve(NCODERS); for (int i = 0; i < NCODERS; i++) - fifo[i] = new fifo_t(fifo_size); + fifo.emplace_back(fifo_size); reset(); } -atsc_viterbi_decoder_impl::~atsc_viterbi_decoder_impl() -{ - for (int i = 0; i < NCODERS; i++) - delete fifo[i]; -} +atsc_viterbi_decoder_impl::~atsc_viterbi_decoder_impl() {} void atsc_viterbi_decoder_impl::reset() { for (int i = 0; i < NCODERS; i++) - fifo[i]->reset(); + fifo[i].reset(); } std::vector<float> atsc_viterbi_decoder_impl::decoder_metrics() const @@ -111,7 +108,7 @@ int atsc_viterbi_decoder_impl::work(int noutput_items, dbindex = dbwhere >> 3; shift = dbwhere & 0x7; out_copy[dbindex] = (out_copy[dbindex] & ~(0x03 << shift)) | - (fifo[encoder]->stuff(dibits[encoder][k]) << shift); + (fifo[encoder].stuff(dibits[encoder][k]) << shift); } /* Symbols fed into one encoder */ } /* Encoders */ diff --git a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h index d9fed5d02d..9c265678c3 100644 --- a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h +++ b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h @@ -44,7 +44,7 @@ private: static constexpr int INPUT_SIZE = (ATSC_DATA_SEGMENT_LENGTH * 12); single_viterbi_t viterbi[NCODERS]; - fifo_t* fifo[NCODERS]; + std::vector<fifo_t> fifo; public: atsc_viterbi_decoder_impl(); diff --git a/gr-dtv/lib/atsc/interleaver_fifo.h b/gr-dtv/lib/atsc/interleaver_fifo.h index 12977feb18..7db48a155e 100644 --- a/gr-dtv/lib/atsc/interleaver_fifo.h +++ b/gr-dtv/lib/atsc/interleaver_fifo.h @@ -11,7 +11,8 @@ #ifndef _INTERLEAVER_FIFO_H_ #define _INTERLEAVER_FIFO_H_ -#include <string.h> +#include <algorithm> +#include <vector> /*! * \brief template class for interleaver fifo @@ -22,7 +23,6 @@ class interleaver_fifo { public: interleaver_fifo(unsigned int size); - ~interleaver_fifo(); //! reset interleaver (flushes contents and resets commutator) void reset(); @@ -30,44 +30,33 @@ public: //! stuff a symbol into the fifo and return the oldest symbol_type stuff(symbol_type input) { - if (m_size == 0) + if (m_fifo.empty()) return input; symbol_type retval = m_fifo[m_position]; m_fifo[m_position] = input; m_position++; - if (m_position >= m_size) + if (m_position >= m_fifo.size()) m_position = 0; return retval; } protected: - unsigned int m_size; - unsigned int m_position; - symbol_type* m_fifo; + unsigned int m_position = 0; + std::vector<symbol_type> m_fifo; }; template <class symbol_type> -interleaver_fifo<symbol_type>::interleaver_fifo(unsigned int size) +interleaver_fifo<symbol_type>::interleaver_fifo(unsigned int size) : m_fifo(size) { - m_size = size; - m_position = 0; - m_fifo = new symbol_type[size]; - memset(m_fifo, 0, m_size * sizeof(symbol_type)); -} - -template <class symbol_type> -interleaver_fifo<symbol_type>::~interleaver_fifo() -{ - delete[] m_fifo; } template <class symbol_type> void interleaver_fifo<symbol_type>::reset() { m_position = 0; - memset(m_fifo, 0, m_size * sizeof(symbol_type)); + std::fill(std::begin(m_fifo), std::end(m_fifo), 0); } #endif /* _INTERLEAVER_FIFO_H_ */ |