summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2016-12-26 23:10:57 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2016-12-26 23:10:57 +0100
commit67c82c97dfcfc68d4bd71f5773d21c34c8733c83 (patch)
treefe3b9b22293bb5c19eef4b44d30c8cde9b32057b
parent91d3331d467c05d673f965b9f6eb8d33715df2b7 (diff)
downloaddabmod-67c82c97dfcfc68d4bd71f5773d21c34c8733c83.tar.gz
dabmod-67c82c97dfcfc68d4bd71f5773d21c34c8733c83.tar.bz2
dabmod-67c82c97dfcfc68d4bd71f5773d21c34c8733c83.zip
Use ref instead of pointer for subchannel sources
-rw-r--r--src/DabModulator.cpp6
-rw-r--r--src/EtiReader.cpp3
-rw-r--r--src/FrameMultiplexer.cpp12
-rw-r--r--src/FrameMultiplexer.h16
-rw-r--r--src/SubchannelSource.cpp18
-rw-r--r--src/SubchannelSource.h18
6 files changed, 41 insertions, 32 deletions
diff --git a/src/DabModulator.cpp b/src/DabModulator.cpp
index f63ecd7..6c28a2e 100644
--- a/src/DabModulator.cpp
+++ b/src/DabModulator.cpp
@@ -157,7 +157,7 @@ int DabModulator::process(Buffer* const dataIn, Buffer* dataOut)
////////////////////////////////////////////////////////////////
auto cifPrbs = make_shared<PrbsGenerator>(864 * 8, 0x110);
auto cifMux = make_shared<FrameMultiplexer>(
- myFicSizeOut + 864 * 8, &myEtiReader.getSubchannels());
+ myFicSizeOut + 864 * 8, myEtiReader.getSubchannels());
auto cifPart = make_shared<BlockPartitioner>(mode, myEtiReader.getFp());
@@ -269,9 +269,7 @@ int DabModulator::process(Buffer* const dataIn, Buffer* dataOut)
////////////////////////////////////////////////////////////////
// Configuring subchannels
////////////////////////////////////////////////////////////////
- std::vector<shared_ptr<SubchannelSource> > subchannels =
- myEtiReader.getSubchannels();
- for (const auto& subchannel : subchannels) {
+ for (const auto& subchannel : myEtiReader.getSubchannels()) {
////////////////////////////////////////////////////////////
// Data initialisation
diff --git a/src/EtiReader.cpp b/src/EtiReader.cpp
index e841f03..010124c 100644
--- a/src/EtiReader.cpp
+++ b/src/EtiReader.cpp
@@ -173,7 +173,8 @@ int EtiReader::process(const Buffer* dataIn)
mySources.clear();
for (unsigned i = 0; i < eti_fc.NST; ++i) {
- mySources.push_back(make_shared<SubchannelSource>(eti_stc[i]));
+ mySources.push_back(
+ make_shared<SubchannelSource>(eti_stc[i]));
PDEBUG("Sstc %u:\n", i);
PDEBUG(" Stc%i.scid: %i\n", i, eti_stc[i].SCID);
PDEBUG(" Stc%i.sad: %u\n", i, eti_stc[i].getStartAddress());
diff --git a/src/FrameMultiplexer.cpp b/src/FrameMultiplexer.cpp
index 0bea1d1..c8ee299 100644
--- a/src/FrameMultiplexer.cpp
+++ b/src/FrameMultiplexer.cpp
@@ -1,6 +1,11 @@
/*
Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Her Majesty
the Queen in Right of Canada (Communications Research Center Canada)
+
+ Copyright (C) 2016
+ Matthias P. Braendli, matthias.braendli@mpb.li
+
+ http://opendigitalradio.org
*/
/*
This file is part of ODR-DabMod.
@@ -33,7 +38,7 @@ typedef std::complex<float> complexf;
FrameMultiplexer::FrameMultiplexer(
size_t framesize,
- const std::vector<std::shared_ptr<SubchannelSource> >* subchannels) :
+ const std::vector<std::shared_ptr<SubchannelSource> >& subchannels) :
ModMux(),
d_frameSize(framesize),
mySubchannels(subchannels)
@@ -77,12 +82,11 @@ int FrameMultiplexer::process(std::vector<Buffer*> dataIn, Buffer* dataOut)
memcpy(out, (*in)->getData(), (*in)->getLength());
++in;
// Write subchannel
- if (mySubchannels->size() != dataIn.size() - 1) {
+ if (mySubchannels.size() != dataIn.size() - 1) {
throw std::out_of_range(
"FrameMultiplexer detected subchannel size change!");
}
- std::vector<std::shared_ptr<SubchannelSource> >::const_iterator subchannel =
- mySubchannels->begin();
+ auto subchannel = mySubchannels.begin();
while (in != dataIn.end()) {
if ((*subchannel)->framesizeCu() * 8 != (*in)->getLength()) {
throw std::out_of_range(
diff --git a/src/FrameMultiplexer.h b/src/FrameMultiplexer.h
index b1dd971..e01f4bf 100644
--- a/src/FrameMultiplexer.h
+++ b/src/FrameMultiplexer.h
@@ -1,6 +1,11 @@
/*
Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Her Majesty
the Queen in Right of Canada (Communications Research Center Canada)
+
+ Copyright (C) 2016
+ Matthias P. Braendli, matthias.braendli@mpb.li
+
+ http://opendigitalradio.org
*/
/*
This file is part of ODR-DabMod.
@@ -36,11 +41,12 @@
class FrameMultiplexer : public ModMux
{
public:
- FrameMultiplexer(size_t frameSize,
- const std::vector<std::shared_ptr<SubchannelSource> >* subchannels);
+ FrameMultiplexer(
+ size_t frameSize,
+ const std::vector<std::shared_ptr<SubchannelSource> >& subchannels);
virtual ~FrameMultiplexer();
- FrameMultiplexer(const FrameMultiplexer&);
- FrameMultiplexer& operator=(const FrameMultiplexer&);
+ FrameMultiplexer(const FrameMultiplexer&) = delete;
+ FrameMultiplexer& operator=(const FrameMultiplexer&) = delete;
int process(std::vector<Buffer*> dataIn, Buffer* dataOut);
@@ -48,7 +54,7 @@ public:
protected:
size_t d_frameSize;
- const std::vector<std::shared_ptr<SubchannelSource> >* mySubchannels;
+ const std::vector<std::shared_ptr<SubchannelSource> >& mySubchannels;
};
diff --git a/src/SubchannelSource.cpp b/src/SubchannelSource.cpp
index f4b6b55..7632de5 100644
--- a/src/SubchannelSource.cpp
+++ b/src/SubchannelSource.cpp
@@ -59,7 +59,7 @@
#define P24 0xffffffff
-const std::vector<PuncturingRule>& SubchannelSource::get_rules()
+const std::vector<PuncturingRule>& SubchannelSource::get_rules() const
{
return d_puncturing_rules;
}
@@ -635,18 +635,18 @@ SubchannelSource::SubchannelSource(eti_STC &stc) :
}
}
-size_t SubchannelSource::startAddress()
+size_t SubchannelSource::startAddress() const
{
return d_start_address;
}
-size_t SubchannelSource::framesize()
+size_t SubchannelSource::framesize() const
{
return d_framesize;
}
-size_t SubchannelSource::framesizeCu()
+size_t SubchannelSource::framesizeCu() const
{
size_t framesizeCu = 0;
@@ -1003,25 +1003,25 @@ size_t SubchannelSource::framesizeCu()
}
-size_t SubchannelSource::bitrate()
+size_t SubchannelSource::bitrate() const
{
return d_framesize / 3;
}
-size_t SubchannelSource::protection()
+size_t SubchannelSource::protection() const
{
return d_protection;
}
-size_t SubchannelSource::protectionForm()
+size_t SubchannelSource::protectionForm() const
{
return (d_protection >> 5) & 1;
}
-size_t SubchannelSource::protectionLevel()
+size_t SubchannelSource::protectionLevel() const
{
if (protectionForm()) { // Long form
return (d_protection & 0x3) + 1;
@@ -1030,7 +1030,7 @@ size_t SubchannelSource::protectionLevel()
}
-size_t SubchannelSource::protectionOption()
+size_t SubchannelSource::protectionOption() const
{
if (protectionForm()) { // Long form
return (d_protection >> 2) & 0x7;
diff --git a/src/SubchannelSource.h b/src/SubchannelSource.h
index f2f261b..a38c281 100644
--- a/src/SubchannelSource.h
+++ b/src/SubchannelSource.h
@@ -43,15 +43,15 @@ class SubchannelSource : public ModInput
public:
SubchannelSource(eti_STC &stc);
- size_t startAddress();
- size_t framesize();
- size_t framesizeCu();
- size_t bitrate();
- size_t protection();
- size_t protectionForm();
- size_t protectionLevel();
- size_t protectionOption();
- const std::vector<PuncturingRule>& get_rules();
+ size_t startAddress() const;
+ size_t framesize() const;
+ size_t framesizeCu() const;
+ size_t bitrate() const;
+ size_t protection() const;
+ size_t protectionForm() const;
+ size_t protectionLevel() const;
+ size_t protectionOption() const;
+ const std::vector<PuncturingRule>& get_rules() const;
void loadSubchannelData(const Buffer& data);
int process(Buffer* outputData);