+ void set_mute_master_solo ();
+
+ void set_processor_positions ();
+ framecnt_t update_port_latencies (PortSet& ports, PortSet& feeders, bool playback, framecnt_t) const;
+
+ void setup_invisible_processors ();
+ void unpan ();
+
+ boost::shared_ptr<CapturingProcessor> _capturing_processor;
+
+ /** A handy class to keep processor state while we attempt a reconfiguration
+ * that may fail.
+ */
+ class ProcessorState {
+ public:
+ ProcessorState (Route* r)
+ : _route (r)
+ , _processors (r->_processors)
+ , _processor_max_streams (r->processor_max_streams)
+ { }
+
+ void restore () {
+ _route->_processors = _processors;
+ _route->processor_max_streams = _processor_max_streams;
+ }
+
+ private:
+ /* this should perhaps be a shared_ptr, but ProcessorStates will
+ not hang around long enough for it to matter.
+ */
+ Route* _route;
+ ProcessorList _processors;
+ ChanCount _processor_max_streams;
+ };
+
+ friend class ProcessorState;
+
+ /* no copy construction */
+ Route (Route const &);
+
+ void maybe_note_meter_position ();
+
+ /** true if we've made a note of a custom meter position in these variables */
+ bool _custom_meter_position_noted;
+ /** the processor that came after the meter when it was last set to a custom position,
+ or 0.
+ */
+ boost::weak_ptr<Processor> _processor_after_last_custom_meter;
+ /** true if the last custom meter position was at the end of the processor list */
+ bool _last_custom_meter_was_at_end;