int TextTrackList::getTrackIndex(TextTrack& textTrack) { if (is<LoadableTextTrack>(textTrack)) return downcast<LoadableTextTrack>(textTrack).trackElementIndex(); if (textTrack.trackType() == TextTrack::AddTrack) return m_elementTracks.size() + m_addTrackTracks.find(&textTrack); if (textTrack.trackType() == TextTrack::InBand) return m_elementTracks.size() + m_addTrackTracks.size() + m_inbandTracks.find(&textTrack); ASSERT_NOT_REACHED(); return -1; }
void TextTrackList::invalidateTrackIndexesAfterTrack(TextTrack& track) { Vector<RefPtr<TrackBase>>* tracks = nullptr; switch (track.trackType()) { case TextTrack::TrackElement: tracks = &m_elementTracks; for (auto& addTrack : m_addTrackTracks) downcast<TextTrack>(addTrack.get())->invalidateTrackIndex(); for (auto& inbandTrack : m_inbandTracks) downcast<TextTrack>(inbandTrack.get())->invalidateTrackIndex(); break; case TextTrack::AddTrack: tracks = &m_addTrackTracks; for (auto& inbandTrack : m_inbandTracks) downcast<TextTrack>(inbandTrack.get())->invalidateTrackIndex(); break; case TextTrack::InBand: tracks = &m_inbandTracks; break; default: ASSERT_NOT_REACHED(); } size_t index = tracks->find(&track); if (index == notFound) return; for (size_t i = index; i < tracks->size(); ++i) downcast<TextTrack>(*tracks->at(index)).invalidateTrackIndex(); }