summaryrefslogtreecommitdiff
path: root/libs/evoral/src/Sequence.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/evoral/src/Sequence.cpp')
-rw-r--r--libs/evoral/src/Sequence.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/libs/evoral/src/Sequence.cpp b/libs/evoral/src/Sequence.cpp
index 281aec514b..523643665f 100644
--- a/libs/evoral/src/Sequence.cpp
+++ b/libs/evoral/src/Sequence.cpp
@@ -730,12 +730,38 @@ Sequence<Time>::append_sysex_unlocked(const MIDIEvent<Time>& ev)
}
template<typename Time>
-void
+bool
+Sequence<Time>::contains(const boost::shared_ptr< Note<Time> > note) const
+{
+ ReadLock lock (read_lock());
+
+ for (typename Sequence<Time>::Notes::const_iterator i = note_lower_bound(note->time());
+ i != _notes.end() && (*i)->time() == note->time(); ++i) {
+ if (*i == note) {
+ cerr << "Existing note matches: " << *i << endl;
+ return true;
+ }
+ }
+ cerr << "No matching note for " << note << endl;
+ return false;
+}
+
+template<typename Time>
+bool
Sequence<Time>::add_note_unlocked(const boost::shared_ptr< Note<Time> > note)
{
DUMP(format("%1% add note %2% @ %3%\n") % this % (int)note->note() % note->time());
+
+ for (typename Sequence<Time>::Notes::iterator i = note_lower_bound(note->time());
+ i != _notes.end() && (*i)->time() == note->time(); ++i) {
+ if (*i == note) {
+ return false;
+ }
+ }
+
_edited = true;
_notes.insert(note);
+ return true;
}
template<typename Time>