diff options
author | Robin Gareus <robin@gareus.org> | 2019-10-18 01:37:56 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2019-10-18 01:37:56 +0200 |
commit | 88f9aaff7d974faad9d1993cb966df2c1388d256 (patch) | |
tree | 666806450b3777e12acfb4a61992c967ffb0ac15 /libs | |
parent | 3ff1541825990aecd30c07a76e587df2b03e40b0 (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.
Diffstat (limited to 'libs')
-rw-r--r-- | libs/evoral/evoral/ControlList.hpp | 10 |
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; |