summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2019-10-18 01:37:56 +0200
committerRobin Gareus <robin@gareus.org>2019-10-18 01:37:56 +0200
commit88f9aaff7d974faad9d1993cb966df2c1388d256 (patch)
tree666806450b3777e12acfb4a61992c967ffb0ac15
parent3ff1541825990aecd30c07a76e587df2b03e40b0 (diff)
Add API to safely query timestamp of first/last control event
Direct calls to back()->when or front()->when are not safe when the list is concurrently modified, or empty.
-rw-r--r--libs/evoral/evoral/ControlList.hpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/libs/evoral/evoral/ControlList.hpp b/libs/evoral/evoral/ControlList.hpp
index b312623adb..a2cc446f4b 100644
--- a/libs/evoral/evoral/ControlList.hpp
+++ b/libs/evoral/evoral/ControlList.hpp
@@ -111,6 +111,16 @@ public:
void set_descriptor(const ParameterDescriptor& d) { _desc = d; }
EventList::size_type size() const { return _events.size(); }
+
+ /** @return time-stamp of first or last event in the list */
+ double when (bool at_start) const {
+ Glib::Threads::RWLock::ReaderLock lm (_lock);
+ if (_events.empty()) {
+ return 0.0;
+ }
+ return at_start ? _events.front()->when : _events.back()->when;
+ }
+
double length() const {
Glib::Threads::RWLock::ReaderLock lm (_lock);
return _events.empty() ? 0.0 : _events.back()->when;