From 52f0d18ce6482981133f318cec458eb3161045ad Mon Sep 17 00:00:00 2001 From: Steve Lhomme Date: Mon, 19 Apr 2010 08:32:50 +0000 Subject: [PATCH] v1: favor the use of iterators rather than direct access in the tables (nicer for libebml v2) git-svn-id: https://matroska.svn.sourceforge.net/svnroot/matroska/trunk/libmatroska@131 a6f86f6d-0131-4f8e-9e7b-e335508773d5 --- src/KaxCluster.cpp | 43 ++++++++++++++++++++++++------------------- src/KaxCues.cpp | 9 +++++---- src/KaxSeekHead.cpp | 29 ++++++++++++++++------------- 3 files changed, 45 insertions(+), 36 deletions(-) diff --git a/src/KaxCluster.cpp b/src/KaxCluster.cpp index 2f1208a..d6e485f 100644 --- a/src/KaxCluster.cpp +++ b/src/KaxCluster.cpp @@ -168,7 +168,8 @@ bool KaxCluster::AddFrame(const KaxTrackEntry & track, uint64 timecode, DataBuff filepos_t KaxCluster::Render(IOCallback & output, KaxCues & CueToUpdate, bool bSaveDefault) { filepos_t Result = 0; - size_t TrkIndex, Index; + size_t Index; + EBML_MASTER_ITERATOR TrkItr, Itr; // update the Timecode of the Cluster before writing KaxClusterTimecode * Timecode = static_cast(this->FindElt(EBML_INFO(KaxClusterTimecode))); @@ -182,20 +183,22 @@ filepos_t KaxCluster::Render(IOCallback & output, KaxCues & CueToUpdate, bool bS if (bSilentTracksUsed) { KaxTracks & MyTracks = *static_cast(ParentSegment->FindElt(EBML_INFO(KaxTracks))); - for (TrkIndex = 0; TrkIndex < MyTracks.ListSize(); TrkIndex++) { - if (EbmlId(*MyTracks[TrkIndex]) == EBML_ID(KaxTrackEntry)) + for (TrkItr = MyTracks.begin(); TrkItr != MyTracks.end(); ++TrkItr) + { + if (EbmlId(*(*TrkItr)) == EBML_ID(KaxTrackEntry)) { - KaxTrackEntry & entry = *static_cast(MyTracks[TrkIndex]); + KaxTrackEntry & entry = *static_cast(*TrkItr); uint32 tracknum = entry.TrackNumber(); - for (Index = 0; Index < ListSize(); Index++) { - if (EbmlId(*(*this)[Index]) == EBML_ID(KaxBlockGroup)) { - KaxBlockGroup & group = *static_cast((*this)[Index]); + for (Itr = begin(); Itr != end(); ++Itr) + { + if (EbmlId(*(*Itr)) == EBML_ID(KaxBlockGroup)) { + KaxBlockGroup & group = *static_cast(*Itr); if (group.TrackNumber() == tracknum) break; // this track is used } } // the track wasn't found in this cluster - if (Index == ListSize()) + if (Itr == end()) { KaxClusterSilentTracks * SilentTracks = static_cast(this->FindFirstElt(EBML_INFO(KaxClusterSilentTracks))); assert(SilentTracks != NULL); // the flag bSilentTracksUsed should be set when creating the Cluster @@ -209,9 +212,10 @@ filepos_t KaxCluster::Render(IOCallback & output, KaxCues & CueToUpdate, bool bS Result = EbmlMaster::Render(output, bSaveDefault); // For all Blocks add their position on the CueEntry - for (Index = 0; Index < ListSize(); Index++) { - if (EbmlId(*(*this)[Index]) == EBML_ID(KaxBlockGroup)) { - CueToUpdate.PositionSet(*static_cast((*this)[Index])); + for (Itr = begin(); Itr != end(); ++Itr) + { + if (EbmlId(*(*Itr)) == EBML_ID(KaxBlockGroup)) { + CueToUpdate.PositionSet(*static_cast(*Itr)); } } } else { @@ -231,10 +235,11 @@ filepos_t KaxCluster::Render(IOCallback & output, KaxCues & CueToUpdate, bool bS if (bSilentTracksUsed) { KaxTracks & MyTracks = *static_cast(ParentSegment->FindElt(EBML_INFO(KaxTracks))); - for (TrkIndex = 0; TrkIndex < MyTracks.ListSize(); TrkIndex++) { - if (EbmlId(*MyTracks[TrkIndex]) == EBML_ID(KaxTrackEntry)) + for (TrkItr = MyTracks.begin(); TrkItr != MyTracks.end(); ++TrkItr) + { + if (EbmlId(*(*TrkItr)) == EBML_ID(KaxTrackEntry)) { - KaxTrackEntry & entry = *static_cast(MyTracks[TrkIndex]); + KaxTrackEntry & entry = *static_cast(*TrkItr); uint32 tracknum = entry.TrackNumber(); for (Index = 0; Index((*this)[Index])->ReleaseFrames(); + EBML_MASTER_ITERATOR Itr; + for (Itr = begin(); Itr != end(); ++Itr) + { + if (EbmlId(*(*Itr)) == EBML_ID(KaxBlockGroup)) { + static_cast(*Itr)->ReleaseFrames(); } } } diff --git a/src/KaxCues.cpp b/src/KaxCues.cpp index 7fdf9bd..dc588b6 100644 --- a/src/KaxCues.cpp +++ b/src/KaxCues.cpp @@ -125,10 +125,11 @@ const KaxCuePoint * KaxCues::GetTimecodePoint(uint64 aTimecode) const const KaxCuePoint * aPointNext = NULL; uint64 aNextTime = EBML_PRETTYLONGINT(0xFFFFFFFFFFFF); - for (unsigned int i=0; i((*this)[i]); + EBML_MASTER_ITERATOR Itr; + for (Itr = begin(); Itr != end(); ++Itr) + { + if (EbmlId(*(*Itr)) == EBML_ID(KaxCuePoint)) { + const KaxCuePoint *tmp = static_cast(*Itr); // check the tile const KaxCueTime *aTime = static_cast(tmp->FindFirstElt(EBML_INFO(KaxCueTime))); if (aTime != NULL) diff --git a/src/KaxSeekHead.cpp b/src/KaxSeekHead.cpp index cbc459e..64cf02a 100644 --- a/src/KaxSeekHead.cpp +++ b/src/KaxSeekHead.cpp @@ -82,9 +82,11 @@ KaxSeek * KaxSeekHead::FindFirstOf(const EbmlCallbacks & Callbacks) const while (aElt != NULL) { KaxSeekID * aId = NULL; - for (unsigned int i = 0; iListSize(); i++) { - if (EbmlId(*(*aElt)[i]) == EBML_ID(KaxSeekID)) { - aId = static_cast((*aElt)[i]); + EBML_MASTER_ITERATOR Itr; + for (Itr = aElt->begin(); Itr != aElt->end(); ++Itr) + { + if (EbmlId(*(*Itr)) == EBML_ID(KaxSeekID)) { + aId = static_cast(*Itr); EbmlId aEbmlId(aId->GetBuffer(), aId->GetSize()); if (aEbmlId == EBML_INFO_ID(Callbacks)) { @@ -101,23 +103,24 @@ KaxSeek * KaxSeekHead::FindFirstOf(const EbmlCallbacks & Callbacks) const KaxSeek * KaxSeekHead::FindNextOf(const KaxSeek &aPrev) const { - unsigned int iIndex; + EBML_MASTER_ITERATOR Itr; KaxSeek *tmp; // look for the previous in the list - for (iIndex = 0; iIndex(&aPrev)) + for (Itr = begin(); Itr != end(); ++Itr) + { + if (*Itr == static_cast(&aPrev)) break; } - if (iIndex IsEbmlId(aPrev)) return tmp; } -- 2.40.0