summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorUwe Klotz <uklotz@mixxx.org>2021-09-29 11:38:38 +0200
committerUwe Klotz <uklotz@mixxx.org>2021-09-29 12:39:08 +0200
commitbeaf5250357d5fc0da1f40f2bdd21c3ca62ba283 (patch)
tree607dc64324eb9c2aa2cc855be8c7d2e5897c31f0 /src
parentdf574b1a38c585862352c1ecde00eb724ba1f7c0 (diff)
Beats: Use std::make_shared
Diffstat (limited to 'src')
-rw-r--r--src/track/beatgrid.cpp35
-rw-r--r--src/track/beatgrid.h17
-rw-r--r--src/track/beatmap.cpp26
-rw-r--r--src/track/beatmap.h21
-rw-r--r--src/track/beats.h11
5 files changed, 77 insertions, 33 deletions
diff --git a/src/track/beatgrid.cpp b/src/track/beatgrid.cpp
index 48de26c2b4..a63006511f 100644
--- a/src/track/beatgrid.cpp
+++ b/src/track/beatgrid.cpp
@@ -46,6 +46,7 @@ class BeatGridIterator : public BeatIterator {
};
BeatGrid::BeatGrid(
+ MakeSharedTag,
audio::SampleRate sampleRate,
const QString& subVersion,
const mixxx::track::io::BeatGrid& grid,
@@ -56,17 +57,18 @@ BeatGrid::BeatGrid(
m_beatLengthFrames(beatLengthFrames) {
}
-BeatGrid::BeatGrid(const BeatGrid& other,
+BeatGrid::BeatGrid(
+ MakeSharedTag,
+ const BeatGrid& other,
const mixxx::track::io::BeatGrid& grid,
audio::FrameDiff_t beatLengthFrames)
- : m_subVersion(other.m_subVersion),
- m_sampleRate(other.m_sampleRate),
- m_grid(grid),
- m_beatLengthFrames(beatLengthFrames) {
+ : BeatGrid({}, other.m_sampleRate, other.m_subVersion, grid, beatLengthFrames) {
}
-BeatGrid::BeatGrid(const BeatGrid& other)
- : BeatGrid(other, other.m_grid, other.m_beatLengthFrames) {
+BeatGrid::BeatGrid(
+ MakeSharedTag,
+ const BeatGrid& other)
+ : BeatGrid({}, other, other.m_grid, other.m_beatLengthFrames) {
}
// static
@@ -96,7 +98,8 @@ BeatsPointer BeatGrid::makeBeatGrid(
// Calculate beat length as sample offsets
const audio::FrameDiff_t beatLengthFrames = 60.0 * sampleRate / bpm.value();
- return BeatsPointer(new BeatGrid(sampleRate, subVersion, grid, beatLengthFrames));
+ return std::make_shared<BeatGrid>(
+ MakeSharedTag{}, sampleRate, subVersion, grid, beatLengthFrames);
}
// static
@@ -107,12 +110,16 @@ BeatsPointer BeatGrid::fromByteArray(
mixxx::track::io::BeatGrid grid;
if (grid.ParseFromArray(byteArray.constData(), byteArray.length())) {
const audio::FrameDiff_t beatLengthFrames = (60.0 * sampleRate / grid.bpm().bpm());
- return BeatsPointer(new BeatGrid(sampleRate, subVersion, grid, beatLengthFrames));
+ return std::make_shared<BeatGrid>(MakeSharedTag{},
+ sampleRate,
+ subVersion,
+ grid,
+ beatLengthFrames);
}
// Legacy fallback for BeatGrid-1.0
if (byteArray.size() != sizeof(BeatGridData)) {
- return BeatsPointer(new BeatGrid(sampleRate, QString(), grid, 0));
+ return std::make_shared<BeatGrid>(MakeSharedTag{}, sampleRate, QString(), grid, 0);
}
const BeatGridData* blob = reinterpret_cast<const BeatGridData*>(byteArray.constData());
const auto firstBeat = mixxx::audio::FramePos(blob->firstBeat);
@@ -259,7 +266,7 @@ BeatsPointer BeatGrid::translate(audio::FrameDiff_t offset) const {
static_cast<google::protobuf::int32>(
newFirstBeatPosition.toLowerFrameBoundary().value()));
- return BeatsPointer(new BeatGrid(*this, grid, m_beatLengthFrames));
+ return std::make_shared<BeatGrid>(MakeSharedTag{}, *this, grid, m_beatLengthFrames);
}
BeatsPointer BeatGrid::scale(BpmScale scale) const {
@@ -297,17 +304,17 @@ BeatsPointer BeatGrid::scale(BpmScale scale) const {
bpm = BeatUtils::roundBpmWithinRange(bpm - kBpmScaleRounding, bpm, bpm + kBpmScaleRounding);
grid.mutable_bpm()->set_bpm(bpm.value());
const mixxx::audio::FrameDiff_t beatLengthFrames = (60.0 * m_sampleRate / bpm.value());
- return BeatsPointer(new BeatGrid(*this, grid, beatLengthFrames));
+ return std::make_shared<BeatGrid>(MakeSharedTag{}, *this, grid, beatLengthFrames);
}
BeatsPointer BeatGrid::setBpm(mixxx::Bpm bpm) const {
VERIFY_OR_DEBUG_ASSERT(bpm.isValid()) {
- return nullptr;
+ return clone();
}
mixxx::track::io::BeatGrid grid = m_grid;
grid.mutable_bpm()->set_bpm(bpm.value());
const mixxx::audio::FrameDiff_t beatLengthFrames = (60.0 * m_sampleRate / bpm.value());
- return BeatsPointer(new BeatGrid(*this, grid, beatLengthFrames));
+ return std::make_shared<BeatGrid>(MakeSharedTag{}, *this, grid, beatLengthFrames);
}
} // namespace mixxx
diff --git a/src/track/beatgrid.h b/src/track/beatgrid.h
index 5b3374c40e..a2e5b117b1 100644
--- a/src/track/beatgrid.h
+++ b/src/track/beatgrid.h
@@ -66,16 +66,27 @@ class BeatGrid final : public Beats {
BeatsPointer scale(BpmScale scale) const override;
BeatsPointer setBpm(mixxx::Bpm bpm) const override;
- private:
+ ////////////////////////////////////////////////////////////////////////////
+ // Hidden constructors
+ ////////////////////////////////////////////////////////////////////////////
+
BeatGrid(
+ MakeSharedTag,
audio::SampleRate sampleRate,
const QString& subVersion,
const mixxx::track::io::BeatGrid& grid,
double beatLength);
// Constructor to update the beat grid
- BeatGrid(const BeatGrid& other, const mixxx::track::io::BeatGrid& grid, double beatLength);
- BeatGrid(const BeatGrid& other);
+ BeatGrid(
+ MakeSharedTag,
+ const BeatGrid& other,
+ const mixxx::track::io::BeatGrid& grid,
+ double beatLength);
+ BeatGrid(
+ MakeSharedTag,
+ const BeatGrid& other);
+ private:
audio::FramePos firstBeatPosition() const;
mixxx::Bpm bpm() const;
diff --git a/src/track/beatmap.cpp b/src/track/beatmap.cpp
index 4b5989d718..5f80ddf435 100644
--- a/src/track/beatmap.cpp
+++ b/src/track/beatmap.cpp
@@ -178,6 +178,7 @@ class BeatMapIterator : public BeatIterator {
};
BeatMap::BeatMap(
+ MakeSharedTag,
audio::SampleRate sampleRate,
const QString& subVersion,
BeatList beats,
@@ -188,15 +189,18 @@ BeatMap::BeatMap(
m_beats(std::move(beats)) {
}
-BeatMap::BeatMap(const BeatMap& other, BeatList beats, mixxx::Bpm nominalBpm)
- : m_subVersion(other.m_subVersion),
- m_sampleRate(other.m_sampleRate),
- m_nominalBpm(nominalBpm),
- m_beats(std::move(beats)) {
+BeatMap::BeatMap(
+ MakeSharedTag,
+ const BeatMap& other,
+ BeatList beats,
+ mixxx::Bpm nominalBpm)
+ : BeatMap({}, other.m_sampleRate, other.m_subVersion, std::move(beats), nominalBpm) {
}
-BeatMap::BeatMap(const BeatMap& other)
- : BeatMap(other, other.m_beats, other.m_nominalBpm) {
+BeatMap::BeatMap(
+ MakeSharedTag,
+ const BeatMap& other)
+ : BeatMap({}, other, other.m_beats, other.m_nominalBpm) {
}
// static
@@ -218,7 +222,7 @@ BeatsPointer BeatMap::fromByteArray(
qDebug() << "ERROR: Could not parse BeatMap from QByteArray of size"
<< byteArray.size();
}
- return BeatsPointer(new BeatMap(sampleRate, subVersion, beatList, nominalBpm));
+ return std::make_shared<BeatMap>(MakeSharedTag{}, sampleRate, subVersion, beatList, nominalBpm);
}
// static
@@ -250,7 +254,7 @@ BeatsPointer BeatMap::makeBeatMap(
previousBeatPos = beatPos;
}
const auto nominalBpm = calculateNominalBpm(beatList, sampleRate);
- return BeatsPointer(new BeatMap(sampleRate, subVersion, beatList, nominalBpm));
+ return std::make_shared<BeatMap>(MakeSharedTag{}, sampleRate, subVersion, beatList, nominalBpm);
}
QByteArray BeatMap::toByteArray() const {
@@ -543,7 +547,7 @@ BeatsPointer BeatMap::translate(audio::FrameDiff_t offset) const {
}
}
- return BeatsPointer(new BeatMap(*this, beats, m_nominalBpm));
+ return std::make_shared<BeatMap>(MakeSharedTag{}, *this, beats, m_nominalBpm);
}
BeatsPointer BeatMap::scale(BpmScale scale) const {
@@ -591,7 +595,7 @@ BeatsPointer BeatMap::scale(BpmScale scale) const {
}
mixxx::Bpm bpm = calculateNominalBpm(beats, m_sampleRate);
- return BeatsPointer(new BeatMap(*this, beats, bpm));
+ return std::make_shared<BeatMap>(MakeSharedTag{}, *this, beats, bpm);
}
BeatsPointer BeatMap::setBpm(mixxx::Bpm bpm) const {
diff --git a/src/track/beatmap.h b/src/track/beatmap.h
index 6ada9fd907..1ad9232dcc 100644
--- a/src/track/beatmap.h
+++ b/src/track/beatmap.h
@@ -20,7 +20,6 @@ namespace mixxx {
class BeatMap final : public Beats {
public:
-
~BeatMap() override = default;
static BeatsPointer fromByteArray(
@@ -69,15 +68,27 @@ class BeatMap final : public Beats {
BeatsPointer scale(BpmScale scale) const override;
BeatsPointer setBpm(mixxx::Bpm bpm) const override;
- private:
- BeatMap(audio::SampleRate sampleRate,
+ ////////////////////////////////////////////////////////////////////////////
+ // Hidden constructors
+ ////////////////////////////////////////////////////////////////////////////
+
+ BeatMap(
+ MakeSharedTag,
+ audio::SampleRate sampleRate,
const QString& subVersion,
BeatList beats,
mixxx::Bpm nominalBpm);
// Constructor to update the beat map
- BeatMap(const BeatMap& other, BeatList beats, mixxx::Bpm nominalBpm);
- BeatMap(const BeatMap& other);
+ BeatMap(
+ MakeSharedTag,
+ const BeatMap& other,
+ BeatList beats,
+ mixxx::Bpm nominalBpm);
+ BeatMap(
+ MakeSharedTag,
+ const BeatMap& other);
+ private:
bool isValid() const override;
const QString m_subVersion;
diff --git a/src/track/beats.h b/src/track/beats.h
index 56e9387fe2..4add4a3578 100644
--- a/src/track/beats.h
+++ b/src/track/beats.h
@@ -176,7 +176,18 @@ class Beats : private std::enable_shared_from_this<Beats> {
virtual BeatsPointer setBpm(mixxx::Bpm bpm) const = 0;
protected:
+ /// Type tag for making public constructors of derived classes inaccessible.
+ ///
+ /// The constructors must be public for using std::make_shared().
+ struct MakeSharedTag {};
+
+ Beats() = default;
+
virtual bool isValid() const = 0;
+
+ private:
+ Beats(const Beats&) = delete;
+ Beats(Beats&&) = delete;
};
} // namespace mixxx