13
0

Add a dedicated PlaylistSet type

This is to consolidate various locations that use
`typedef std::set<std::shared_ptr<Playlist>>`
throughout the codebase.
This commit is contained in:
Robin Gareus 2023-04-06 01:42:03 +02:00
parent 0b8d5d3dc5
commit 8b59bf47df
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
7 changed files with 52 additions and 51 deletions

View File

@ -31,12 +31,12 @@ template<class T> void
SessionPlaylists::foreach (T *obj, void (T::*func)(std::shared_ptr<Playlist>)) SessionPlaylists::foreach (T *obj, void (T::*func)(std::shared_ptr<Playlist>))
{ {
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
for (List::iterator i = playlists.begin(); i != playlists.end(); i++) { for (PlaylistSet::iterator i = playlists.begin(); i != playlists.end(); i++) {
if (!(*i)->hidden()) { if (!(*i)->hidden()) {
(obj->*func) (*i); (obj->*func) (*i);
} }
} }
for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); i++) { for (PlaylistSet::iterator i = unused_playlists.begin(); i != unused_playlists.end(); i++) {
if (!(*i)->hidden()) { if (!(*i)->hidden()) {
(obj->*func) (*i); (obj->*func) (*i);
} }

View File

@ -92,9 +92,9 @@ private:
std::shared_ptr<Playlist> XMLPlaylistFactory (Session &, const XMLNode&); std::shared_ptr<Playlist> XMLPlaylistFactory (Session &, const XMLNode&);
mutable Glib::Threads::Mutex lock; mutable Glib::Threads::Mutex lock;
typedef std::set<std::shared_ptr<Playlist> > List;
List playlists; PlaylistSet playlists;
List unused_playlists; PlaylistSet unused_playlists;
}; };
} }

View File

@ -73,6 +73,7 @@ class AudioSource;
class GraphNode; class GraphNode;
class Route; class Route;
class Region; class Region;
class Playlist;
class Stripable; class Stripable;
class VCA; class VCA;
class AutomationControl; class AutomationControl;
@ -101,6 +102,7 @@ typedef std::list<std::pair<sampleoffset_t, sampleoffset_t> > AudioIntervalResul
typedef std::map<std::shared_ptr<ARDOUR::Region>,AudioIntervalResult> AudioIntervalMap; typedef std::map<std::shared_ptr<ARDOUR::Region>,AudioIntervalResult> AudioIntervalMap;
typedef std::list<std::shared_ptr<Region> > RegionList; typedef std::list<std::shared_ptr<Region> > RegionList;
typedef std::set<std::shared_ptr<Playlist> > PlaylistSet;
struct IOChange { struct IOChange {

View File

@ -1162,6 +1162,7 @@ Playlist::partition_internal (timepos_t const & start, timepos_t const & end, bo
/* keep track of any dead space at end (for pasting into Ripple or RippleAll mode) */ /* keep track of any dead space at end (for pasting into Ripple or RippleAll mode) */
const timecnt_t wanted_length = start.distance (end); const timecnt_t wanted_length = start.distance (end);
_end_space = wanted_length - _get_extent().first.distance (_get_extent().second); _end_space = wanted_length - _get_extent().first.distance (_get_extent().second);
cout << "PL: " << name() << " END SPACE: " << _end_space << " WANTED LEN: " << wanted_length << " EXT: " << _get_extent().first << " to " << get_extent().second << "\n";
} }
std::shared_ptr<Playlist> std::shared_ptr<Playlist>

View File

@ -5104,7 +5104,7 @@ bool
Session::playlist_is_active (std::shared_ptr<Playlist> playlist) Session::playlist_is_active (std::shared_ptr<Playlist> playlist)
{ {
Glib::Threads::Mutex::Lock lm (_playlists->lock); Glib::Threads::Mutex::Lock lm (_playlists->lock);
for (SessionPlaylists::List::iterator i = _playlists->playlists.begin(); i != _playlists->playlists.end(); i++) { for (PlaylistSet::iterator i = _playlists->playlists.begin(); i != _playlists->playlists.end(); i++) {
if ( (*i) == playlist ) { if ( (*i) == playlist ) {
return true; return true;
} }

View File

@ -39,8 +39,8 @@ SessionPlaylists::~SessionPlaylists ()
{ {
DEBUG_TRACE (DEBUG::Destruction, "delete playlists\n"); DEBUG_TRACE (DEBUG::Destruction, "delete playlists\n");
for (List::iterator i = playlists.begin(); i != playlists.end(); ) { for (PlaylistSet::iterator i = playlists.begin(); i != playlists.end(); ) {
SessionPlaylists::List::iterator tmp; PlaylistSet::iterator tmp;
tmp = i; tmp = i;
++tmp; ++tmp;
@ -53,8 +53,8 @@ SessionPlaylists::~SessionPlaylists ()
} }
DEBUG_TRACE (DEBUG::Destruction, "delete unused playlists\n"); DEBUG_TRACE (DEBUG::Destruction, "delete unused playlists\n");
for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ) { for (PlaylistSet::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ) {
List::iterator tmp; PlaylistSet::iterator tmp;
tmp = i; tmp = i;
++tmp; ++tmp;
@ -102,7 +102,7 @@ SessionPlaylists::remove (std::shared_ptr<Playlist> playlist)
{ {
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
List::iterator i; PlaylistSet::iterator i;
i = find (playlists.begin(), playlists.end(), playlist); i = find (playlists.begin(), playlists.end(), playlist);
if (i != playlists.end()) { if (i != playlists.end()) {
@ -123,7 +123,7 @@ SessionPlaylists::update_tracking ()
* Check playlist refcnt, move unused playlist to unused_playlists * Check playlist refcnt, move unused playlist to unused_playlists
* array (which may be the case when loading old sessions) * array (which may be the case when loading old sessions)
*/ */
for (List::iterator i = playlists.begin(); i != playlists.end(); ) { for (PlaylistSet::iterator i = playlists.begin(); i != playlists.end(); ) {
if ((*i)->hidden () || (*i)->used ()) { if ((*i)->hidden () || (*i)->used ()) {
++i; ++i;
continue; continue;
@ -134,7 +134,7 @@ SessionPlaylists::update_tracking ()
assert (unused_playlists.find (*i) == unused_playlists.end()); assert (unused_playlists.find (*i) == unused_playlists.end());
unused_playlists.insert (*i); unused_playlists.insert (*i);
List::iterator rm = i; PlaylistSet::iterator rm = i;
++i; ++i;
playlists.erase (rm); playlists.erase (rm);
} }
@ -149,7 +149,7 @@ SessionPlaylists::track (bool inuse, std::weak_ptr<Playlist> wpl)
return; return;
} }
List::iterator x; PlaylistSet::iterator x;
if (pl->hidden()) { if (pl->hidden()) {
/* its not supposed to be visible */ /* its not supposed to be visible */
@ -196,7 +196,7 @@ SessionPlaylists::for_pgroup (string pgroup_id, const PBD::ID& id)
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) { for (PlaylistSet::iterator i = playlists.begin(); i != playlists.end(); ++i) {
if ((*i)->pgroup_id() == pgroup_id) { if ((*i)->pgroup_id() == pgroup_id) {
if ((*i)->get_orig_track_id() == id) { if ((*i)->get_orig_track_id() == id) {
return* i; return* i;
@ -204,7 +204,7 @@ SessionPlaylists::for_pgroup (string pgroup_id, const PBD::ID& id)
} }
} }
for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) { for (PlaylistSet::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
if ((*i)->pgroup_id() == pgroup_id) { if ((*i)->pgroup_id() == pgroup_id) {
if ((*i)->get_orig_track_id() == id) { if ((*i)->get_orig_track_id() == id) {
return* i; return* i;
@ -227,13 +227,13 @@ SessionPlaylists::playlists_for_pgroup (std::string pgroup)
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) { for (PlaylistSet::iterator i = playlists.begin(); i != playlists.end(); ++i) {
if ((*i)->pgroup_id().compare(pgroup)==0) { if ((*i)->pgroup_id().compare(pgroup)==0) {
pl_tr.push_back (*i); pl_tr.push_back (*i);
} }
} }
for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) { for (PlaylistSet::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
if ((*i)->pgroup_id().compare(pgroup)==0) { if ((*i)->pgroup_id().compare(pgroup)==0) {
pl_tr.push_back (*i); pl_tr.push_back (*i);
} }
@ -247,13 +247,13 @@ SessionPlaylists::by_name (string name)
{ {
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) { for (PlaylistSet::iterator i = playlists.begin(); i != playlists.end(); ++i) {
if ((*i)->name() == name) { if ((*i)->name() == name) {
return* i; return* i;
} }
} }
for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) { for (PlaylistSet::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
if ((*i)->name() == name) { if ((*i)->name() == name) {
return* i; return* i;
} }
@ -267,13 +267,13 @@ SessionPlaylists::by_id (const PBD::ID& id)
{ {
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) { for (PlaylistSet::iterator i = playlists.begin(); i != playlists.end(); ++i) {
if ((*i)->id() == id) { if ((*i)->id() == id) {
return* i; return* i;
} }
} }
for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) { for (PlaylistSet::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
if ((*i)->id() == id) { if ((*i)->id() == id) {
return* i; return* i;
} }
@ -287,13 +287,13 @@ SessionPlaylists::unassigned (std::list<std::shared_ptr<Playlist> > & list)
{ {
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) { for (PlaylistSet::iterator i = playlists.begin(); i != playlists.end(); ++i) {
if (!(*i)->get_orig_track_id().to_s().compare ("0")) { if (!(*i)->get_orig_track_id().to_s().compare ("0")) {
list.push_back (*i); list.push_back (*i);
} }
} }
for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) { for (PlaylistSet::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
if (!(*i)->get_orig_track_id().to_s().compare ("0")) { if (!(*i)->get_orig_track_id().to_s().compare ("0")) {
list.push_back (*i); list.push_back (*i);
} }
@ -305,13 +305,13 @@ SessionPlaylists::update_orig_2X (PBD::ID old_orig, PBD::ID new_orig)
{ {
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) { for (PlaylistSet::iterator i = playlists.begin(); i != playlists.end(); ++i) {
if ((*i)->get_orig_track_id() == old_orig) { if ((*i)->get_orig_track_id() == old_orig) {
(*i)->set_orig_track_id (new_orig); (*i)->set_orig_track_id (new_orig);
} }
} }
for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) { for (PlaylistSet::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
if ((*i)->get_orig_track_id() == old_orig) { if ((*i)->get_orig_track_id() == old_orig) {
(*i)->set_orig_track_id (new_orig); (*i)->set_orig_track_id (new_orig);
} }
@ -323,11 +323,11 @@ SessionPlaylists::get (vector<std::shared_ptr<Playlist> >& s) const
{ {
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
for (List::const_iterator i = playlists.begin(); i != playlists.end(); ++i) { for (PlaylistSet::const_iterator i = playlists.begin(); i != playlists.end(); ++i) {
s.push_back (*i); s.push_back (*i);
} }
for (List::const_iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) { for (PlaylistSet::const_iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
s.push_back (*i); s.push_back (*i);
} }
} }
@ -337,11 +337,11 @@ SessionPlaylists::destroy_region (std::shared_ptr<Region> r)
{ {
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) { for (PlaylistSet::iterator i = playlists.begin(); i != playlists.end(); ++i) {
(*i)->destroy_region (r); (*i)->destroy_region (r);
} }
for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) { for (PlaylistSet::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
(*i)->destroy_region (r); (*i)->destroy_region (r);
} }
} }
@ -358,14 +358,14 @@ SessionPlaylists::source_use_count (std::shared_ptr<const Source> src) const
* between compound regions. * between compound regions.
*/ */
for (List::const_iterator p = playlists.begin(); p != playlists.end(); ++p) { for (PlaylistSet::const_iterator p = playlists.begin(); p != playlists.end(); ++p) {
if ((*p)->uses_source (src)) { if ((*p)->uses_source (src)) {
++count; ++count;
break; break;
} }
} }
for (List::const_iterator p = unused_playlists.begin(); p != unused_playlists.end(); ++p) { for (PlaylistSet::const_iterator p = unused_playlists.begin(); p != unused_playlists.end(); ++p) {
if ((*p)->uses_source (src)) { if ((*p)->uses_source (src)) {
++count; ++count;
break; break;
@ -380,7 +380,7 @@ SessionPlaylists::sync_all_regions_with_regions ()
{ {
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
for (List::const_iterator p = playlists.begin(); p != playlists.end(); ++p) { for (PlaylistSet::const_iterator p = playlists.begin(); p != playlists.end(); ++p) {
(*p)->sync_all_regions_with_regions (); (*p)->sync_all_regions_with_regions ();
} }
} }
@ -388,11 +388,11 @@ SessionPlaylists::sync_all_regions_with_regions ()
void void
SessionPlaylists::update_after_tempo_map_change () SessionPlaylists::update_after_tempo_map_change ()
{ {
for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) { for (PlaylistSet::iterator i = playlists.begin(); i != playlists.end(); ++i) {
(*i)->update_after_tempo_map_change (); (*i)->update_after_tempo_map_change ();
} }
for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) { for (PlaylistSet::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
(*i)->update_after_tempo_map_change (); (*i)->update_after_tempo_map_change ();
} }
} }
@ -406,13 +406,12 @@ struct id_compare
} }
}; };
typedef std::set<std::shared_ptr<Playlist> > List;
typedef std::set<std::shared_ptr<Playlist>, id_compare> IDSortedList; typedef std::set<std::shared_ptr<Playlist>, id_compare> IDSortedList;
static void static void
get_id_sorted_playlists (const List& playlists, IDSortedList& id_sorted_playlists) get_id_sorted_playlists (const PlaylistSet& playlists, IDSortedList& id_sorted_playlists)
{ {
for (List::const_iterator i = playlists.begin(); i != playlists.end(); ++i) { for (PlaylistSet::const_iterator i = playlists.begin(); i != playlists.end(); ++i) {
id_sorted_playlists.insert(*i); id_sorted_playlists.insert(*i);
} }
} }
@ -469,7 +468,7 @@ SessionPlaylists::maybe_delete_unused (boost::function<int(std::shared_ptr<Playl
bool delete_remaining = false; bool delete_remaining = false;
bool keep_remaining = false; bool keep_remaining = false;
for (List::iterator x = unused_playlists.begin(); x != unused_playlists.end(); ++x) { for (PlaylistSet::iterator x = unused_playlists.begin(); x != unused_playlists.end(); ++x) {
if (keep_remaining) { if (keep_remaining) {
break; break;
@ -583,14 +582,14 @@ SessionPlaylists::find_crossfade (const PBD::ID& id)
std::shared_ptr<Crossfade> c; std::shared_ptr<Crossfade> c;
for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) { for (PlaylistSet::iterator i = playlists.begin(); i != playlists.end(); ++i) {
c = (*i)->find_crossfade (id); c = (*i)->find_crossfade (id);
if (c) { if (c) {
return c; return c;
} }
} }
for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) { for (PlaylistSet::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
c = (*i)->find_crossfade (id); c = (*i)->find_crossfade (id);
if (c) { if (c) {
return c; return c;
@ -606,11 +605,11 @@ SessionPlaylists::region_use_count (std::shared_ptr<Region> region) const
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
uint32_t cnt = 0; uint32_t cnt = 0;
for (List::const_iterator i = playlists.begin(); i != playlists.end(); ++i) { for (PlaylistSet::const_iterator i = playlists.begin(); i != playlists.end(); ++i) {
cnt += (*i)->region_use_count (region); cnt += (*i)->region_use_count (region);
} }
for (List::const_iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) { for (PlaylistSet::const_iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
cnt += (*i)->region_use_count (region); cnt += (*i)->region_use_count (region);
} }
@ -624,7 +623,7 @@ SessionPlaylists::get_used () const
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
for (List::const_iterator i = playlists.begin(); i != playlists.end(); ++i) { for (PlaylistSet::const_iterator i = playlists.begin(); i != playlists.end(); ++i) {
pl.push_back (*i); pl.push_back (*i);
} }
@ -638,7 +637,7 @@ SessionPlaylists::get_unused () const
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
for (List::const_iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) { for (PlaylistSet::const_iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
pl.push_back (*i); pl.push_back (*i);
} }
@ -670,7 +669,7 @@ void
SessionPlaylists::foreach (boost::function<void(std::shared_ptr<const Playlist>)> functor, bool incl_unused) SessionPlaylists::foreach (boost::function<void(std::shared_ptr<const Playlist>)> functor, bool incl_unused)
{ {
Glib::Threads::Mutex::Lock lm (lock); Glib::Threads::Mutex::Lock lm (lock);
for (List::iterator i = playlists.begin(); i != playlists.end(); i++) { for (PlaylistSet::iterator i = playlists.begin(); i != playlists.end(); i++) {
if (!(*i)->hidden()) { if (!(*i)->hidden()) {
functor (*i); functor (*i);
} }
@ -678,7 +677,7 @@ SessionPlaylists::foreach (boost::function<void(std::shared_ptr<const Playlist>)
if (!incl_unused) { if (!incl_unused) {
return; return;
} }
for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); i++) { for (PlaylistSet::iterator i = unused_playlists.begin(); i != unused_playlists.end(); i++) {
if (!(*i)->hidden()) { if (!(*i)->hidden()) {
functor (*i); functor (*i);
} }

View File

@ -1094,7 +1094,6 @@ Session::get_template ()
return state (true, NormalSave); return state (true, NormalSave);
} }
typedef std::set<std::shared_ptr<Playlist> > PlaylistSet;
typedef std::set<std::shared_ptr<Source> > SourceSet; typedef std::set<std::shared_ptr<Source> > SourceSet;
bool bool
@ -1113,8 +1112,8 @@ Session::export_track_state (std::shared_ptr<RouteList> rl, const string& path)
XMLNode* node = new XMLNode("TrackState"); // XXX XMLNode* node = new XMLNode("TrackState"); // XXX
XMLNode* child; XMLNode* child;
PlaylistSet playlists; // SessionPlaylists PlaylistSet playlists; // SessionPlaylists
SourceSet sources; SourceSet sources;
// these will work with new_route_from_template() // these will work with new_route_from_template()
// TODO: LV2 plugin-state-dir needs to be relative (on load?) // TODO: LV2 plugin-state-dir needs to be relative (on load?)