summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-11-27 14:27:27 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2013-11-27 14:27:27 -0500
commitdc4a984cd63d6264ecbd24e414a097420367f684 (patch)
tree4102e0a2f540d30394431fc1dbb1f17f15633894 /libs
parent4d0caa6ddd60e78bea19ed9e23031868d16d44f0 (diff)
move AudioBackend::_start() into protected, and expand a bit on documenting ::start() vs ::_start()
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/audio_backend.h34
-rw-r--r--libs/backends/jack/jack_audiobackend.h4
2 files changed, 24 insertions, 14 deletions
diff --git a/libs/ardour/ardour/audio_backend.h b/libs/ardour/ardour/audio_backend.h
index 26ced33885..17d7cd4010 100644
--- a/libs/ardour/ardour/audio_backend.h
+++ b/libs/ardour/ardour/audio_backend.h
@@ -282,17 +282,7 @@ class AudioBackend : public PortEngine {
virtual std::string midi_option () const = 0;
/* State Control */
-
- /* non-virtual method to avoid possible overrides of default
- * parameters. See Scott Meyers or other books on C++ to
- * understand this pattern, or possibly just this:
- *
- * http://stackoverflow.com/questions/12139786/good-pratice-default-arguments-for-pure-virtual-method
- */
- int start (bool for_latency_measurement=false) {
- return _start (for_latency_measurement);
- }
-
+
/** Start using the device named in the most recent call
* to set_device(), with the parameters set by various
* the most recent calls to set_sample_rate() etc. etc.
@@ -308,8 +298,24 @@ class AudioBackend : public PortEngine {
* any existing systemic latency settings.
*
* Return zero if successful, negative values otherwise.
- */
- virtual int _start (bool for_latency_measurement) = 0;
+ *
+ *
+ *
+ *
+ * Why is this non-virtual but ::_start() is virtual ?
+ * Virtual methods with default parameters create possible ambiguity
+ * because a derived class may implement the same method with a different
+ * type or value of default parameter.
+ *
+ * So we make this non-virtual method to avoid possible overrides of
+ * default parameters. See Scott Meyers or other books on C++ to understand
+ * this pattern, or possibly just this:
+ *
+ * http://stackoverflow.com/questions/12139786/good-pratice-default-arguments-for-pure-virtual-method
+ */
+ int start (bool for_latency_measurement=false) {
+ return _start (for_latency_measurement);
+ }
/** Stop using the device currently in use.
*
@@ -481,6 +487,8 @@ class AudioBackend : public PortEngine {
protected:
AudioEngine& engine;
+
+ virtual int _start (bool for_latency_measurement) = 0;
};
struct AudioBackendInfo {
diff --git a/libs/backends/jack/jack_audiobackend.h b/libs/backends/jack/jack_audiobackend.h
index 2c77e6112b..299bb1cefd 100644
--- a/libs/backends/jack/jack_audiobackend.h
+++ b/libs/backends/jack/jack_audiobackend.h
@@ -89,7 +89,6 @@ class JACKAudioBackend : public AudioBackend {
std::string control_app_name () const;
void launch_control_app ();
- int _start (bool for_latency_measurement);
int stop ();
int freewheel (bool);
@@ -272,6 +271,9 @@ class JACKAudioBackend : public AudioBackend {
*/
JACKSession* _session;
+
+ protected:
+ int _start (bool for_latency_measurement);
};
} // namespace