diff --git a/genericcontainer.h b/genericcontainer.h index be43cce..07cace4 100644 --- a/genericcontainer.h +++ b/genericcontainer.h @@ -272,8 +272,7 @@ TagType *GenericContainer::create } // a new tag must be created - m_tags.emplace_back(std::make_unique()); - auto &tag = m_tags.back(); + const auto &tag = m_tags.emplace_back(std::make_unique()); tag->setTarget(target); return tag.get(); } @@ -281,7 +280,7 @@ TagType *GenericContainer::create template bool GenericContainer::removeTag(Tag *tag) { - if (auto size = m_tags.size()) { + if (const auto size = m_tags.size()) { m_tags.erase(std::remove_if(m_tags.begin(), m_tags.end(), [tag](const std::unique_ptr &existingTag) -> bool { return static_cast(existingTag.get()) == tag; }), m_tags.end()); @@ -315,43 +314,44 @@ inline void GenericContainer::rem template bool GenericContainer::addTrack(TrackType *track) { - if (areTracksParsed() && supportsTrackModifications()) { - // ensure ID is unique - auto id = track->id(); - ensureIdIsUnique: - for (const auto &existingTrack : m_tracks) { - if (existingTrack->id() == id) { - ++id; - goto ensureIdIsUnique; - } - } - track->setId(id); - - m_tracks.emplace_back(track); - return m_tracksAltered = true; + if (!areTracksParsed() || !supportsTrackModifications()) { + return false; } - return false; + // ensure ID is unique + auto id = track->id(); +ensureIdIsUnique: + for (const auto &existingTrack : m_tracks) { + if (existingTrack->id() == id) { + ++id; + goto ensureIdIsUnique; + } + } + track->setId(id); + + m_tracks.emplace_back(track); + return m_tracksAltered = true; } template bool GenericContainer::removeTrack(AbstractTrack *track) { - bool removed = false; - if (areTracksParsed() && supportsTrackModifications() && !m_tracks.empty()) { - for (auto i = m_tracks.end() - 1, begin = m_tracks.begin();; --i) { - if (static_cast(i->get()) == track) { - i->release(); - m_tracks.erase(i); - removed = true; - } - if (i == begin) { - break; - } + if (!areTracksParsed() || !supportsTrackModifications() || m_tracks.empty()) { + return false; + } + auto removed = false; + for (auto i = m_tracks.end() - 1, begin = m_tracks.begin();; --i) { + if (static_cast(i->get()) == track) { + i->release(); + m_tracks.erase(i); + removed = true; } - if (removed) { - m_tracksAltered = true; + if (i == begin) { + break; } } + if (removed) { + m_tracksAltered = true; + } return removed; } diff --git a/matroska/matroskacontainer.cpp b/matroska/matroskacontainer.cpp index 457ade4..74485f6 100644 --- a/matroska/matroskacontainer.cpp +++ b/matroska/matroskacontainer.cpp @@ -955,10 +955,10 @@ void MatroskaContainer::internalMakeFile(Diagnostics &diag, AbortableProgressFee // calculate size of "Tags"-element for (auto &tag : tags()) { try { - tagMaker.emplace_back(tag->prepareMaking(diag)); - if (tagMaker.back().requiredSize() > 3) { + const auto &maker = tagMaker.emplace_back(tag->prepareMaking(diag)); + if (maker.requiredSize() > 3) { // a tag of 3 bytes size is empty and can be skipped - tagElementsSize += tagMaker.back().requiredSize(); + tagElementsSize += maker.requiredSize(); } } catch (const Failure &) { } @@ -969,10 +969,10 @@ void MatroskaContainer::internalMakeFile(Diagnostics &diag, AbortableProgressFee for (auto &attachment : m_attachments) { if (!attachment->isIgnored()) { try { - attachmentMaker.emplace_back(attachment->prepareMaking(diag)); - if (attachmentMaker.back().requiredSize() > 3) { + const auto &maker = attachmentMaker.emplace_back(attachment->prepareMaking(diag)); + if (maker.requiredSize() > 3) { // an attachment of 3 bytes size is empty and can be skipped - attachedFileElementsSize += attachmentMaker.back().requiredSize(); + attachedFileElementsSize += maker.requiredSize(); } } catch (const Failure &) { } @@ -984,10 +984,10 @@ void MatroskaContainer::internalMakeFile(Diagnostics &diag, AbortableProgressFee // calculate size of "Tracks"-element for (auto &track : tracks()) { try { - trackHeaderMaker.emplace_back(track->prepareMakingHeader(diag)); - if (trackHeaderMaker.back().requiredSize() > 3) { + const auto &maker = trackHeaderMaker.emplace_back(track->prepareMakingHeader(diag)); + if (maker.requiredSize() > 3) { // a track header of 3 bytes size is empty and can be skipped - trackHeaderElementsSize += trackHeaderMaker.back().requiredSize(); + trackHeaderElementsSize += maker.requiredSize(); } } catch (const Failure &) { }