[Summary] Adding option to avoid sorting the routs in Session::foreach method. Now...
authorValeriy Kamyshniy <vkamyshniy@wavesglobal.com>
Thu, 2 Apr 2015 18:51:23 +0000 (21:51 +0300)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 2 Apr 2015 20:32:41 +0000 (16:32 -0400)
[Reviewed] Paul Davis
[Required review] YPozdnyakov, GZharun

gtk2_ardour/ardour_ui.cc
libs/ardour/ardour/session.h
libs/ardour/ardour/session_route.h

index 4d38d71c8564e5d0b01169fd73d2651275e3e520..a81d817442ffa52a38782fb898170410fcc97217 100644 (file)
@@ -1420,7 +1420,7 @@ ARDOUR_UI::update_disk_space()
                snprintf (buf, sizeof (buf), "%s", _("Disk: <span foreground=\"green\">24hrs+</span>"));
        } else {
                rec_enabled_streams = 0;
-               _session->foreach_route (this, &ARDOUR_UI::count_recenabled_streams);
+               _session->foreach_route (this, &ARDOUR_UI::count_recenabled_streams, false);
 
                framecnt_t frames = opt_frames.get_value_or (0);
 
index ad5f236a84b9df0a048ed367de79492e18dfce8a..6329b29ad27420a53b3b793028eae52d25e09a20 100644 (file)
@@ -247,9 +247,9 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
        void notify_remote_id_change ();
        void sync_order_keys ();
 
-       template<class T> void foreach_route (T *obj, void (T::*func)(Route&));
-       template<class T> void foreach_route (T *obj, void (T::*func)(boost::shared_ptr<Route>));
-       template<class T, class A> void foreach_route (T *obj, void (T::*func)(Route&, A), A arg);
+       template<class T> void foreach_route (T *obj, void (T::*func)(Route&), bool sort = true);
+       template<class T> void foreach_route (T *obj, void (T::*func)(boost::shared_ptr<Route>), bool sort = true);
+       template<class T, class A> void foreach_route (T *obj, void (T::*func)(Route&, A), A arg, bool sort = true);
 
        static char session_name_is_legal (const std::string&);
        bool io_name_is_legal (const std::string&);
index 19d8614d1b40221fe4bad6e470f240634ff58a67..61a5737afaee8fe95db6f31f3b1ed8aa78da06a9 100644 (file)
 namespace ARDOUR {
 
 template<class T> void
-Session::foreach_route (T *obj, void (T::*func)(Route&))
+Session::foreach_route (T *obj, void (T::*func)(Route&), bool sort)
 {
        boost::shared_ptr<RouteList> r = routes.reader();
        RouteList public_order (*r);
-       RoutePublicOrderSorter cmp;
-
-       public_order.sort (cmp);
-
+       
+       if (sort) {
+               public_order.sort (RoutePublicOrderSorter());
+       }
+       
        for (RouteList::iterator i = public_order.begin(); i != public_order.end(); i++) {
                (obj->*func) (**i);
        }
 }
 
 template<class T> void
-Session::foreach_route (T *obj, void (T::*func)(boost::shared_ptr<Route>))
+Session::foreach_route (T *obj, void (T::*func)(boost::shared_ptr<Route>), bool sort)
 {
        boost::shared_ptr<RouteList> r = routes.reader();
        RouteList public_order (*r);
-       RoutePublicOrderSorter cmp;
 
-       public_order.sort (cmp);
+       if (sort) {
+               public_order.sort (RoutePublicOrderSorter());
+       }
 
        for (RouteList::iterator i = public_order.begin(); i != public_order.end(); i++) {
                (obj->*func) (*i);
@@ -58,13 +60,14 @@ Session::foreach_route (T *obj, void (T::*func)(boost::shared_ptr<Route>))
 }
 
 template<class T, class A> void
-Session::foreach_route (T *obj, void (T::*func)(Route&, A), A arg1)
+Session::foreach_route (T *obj, void (T::*func)(Route&, A), A arg1, bool sort)
 {
        boost::shared_ptr<RouteList> r = routes.reader();
        RouteList public_order (*r);
-       RoutePublicOrderSorter cmp;
-
-       public_order.sort (cmp);
+       
+       if (sort) {
+               public_order.sort (RoutePublicOrderSorter());
+       }
 
        for (RouteList::iterator i = public_order.begin(); i != public_order.end(); i++) {
                (obj->*func) (**i, arg1);