+boost::shared_ptr<Crossfade>
+SessionPlaylists::find_crossfade (const PBD::ID& id)
+{
+ Glib::Threads::Mutex::Lock lm (lock);
+
+ boost::shared_ptr<Crossfade> c;
+
+ for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
+ c = (*i)->find_crossfade (id);
+ if (c) {
+ return c;
+ }
+ }
+
+ for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
+ c = (*i)->find_crossfade (id);
+ if (c) {
+ return c;
+ }
+ }
+
+ return boost::shared_ptr<Crossfade> ();
+}
+
+uint32_t
+SessionPlaylists::region_use_count (boost::shared_ptr<Region> region) const
+{
+ Glib::Threads::Mutex::Lock lm (lock);
+ uint32_t cnt = 0;
+
+ for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
+ cnt += (*i)->region_use_count (region);
+ }
+
+ for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
+ cnt += (*i)->region_use_count (region);
+ }
+
+ return cnt;
+}
+
+/** @return list of Playlists that are associated with a track */
+vector<boost::shared_ptr<Playlist> >
+SessionPlaylists::playlists_for_track (boost::shared_ptr<Track> tr) const
+{
+ vector<boost::shared_ptr<Playlist> > pl;
+ get (pl);
+
+ vector<boost::shared_ptr<Playlist> > pl_tr;
+
+ for (vector<boost::shared_ptr<Playlist> >::iterator i = pl.begin(); i != pl.end(); ++i) {
+ if (((*i)->get_orig_track_id() == tr->id()) || (tr->playlist()->id() == (*i)->id())) {
+ pl_tr.push_back (*i);
+ }
+ }
+
+ return pl_tr;
+}