~Event();
- const Event& operator=(const Event& copy);
+ void assign (const Event& other);
void set(const uint8_t* buf, uint32_t size, Time t);
}
template<typename Timestamp>
-const Event<Timestamp>&
-Event<Timestamp>::operator=(const Event& copy)
+void
+Event<Timestamp>::assign(const Event& other)
{
- _id = next_event_id ();
- _type = copy._type;
- _original_time = copy._original_time;
- _nominal_time = copy._nominal_time;
- _owns_buf = copy._owns_buf;
+ _id = other._id;
+ _type = other._type;
+ _original_time = other._original_time;
+ _nominal_time = other._nominal_time;
+ _owns_buf = other._owns_buf;
if (_owns_buf) {
- if (copy._buf) {
- if (copy._size > _size) {
- _buf = (uint8_t*)::realloc(_buf, copy._size);
+ if (other._buf) {
+ if (other._size > _size) {
+ _buf = (uint8_t*)::realloc(_buf, other._size);
}
- memcpy(_buf, copy._buf, copy._size);
+ memcpy(_buf, other._buf, other._size);
} else {
free(_buf);
_buf = NULL;
}
} else {
- _buf = copy._buf;
+ _buf = other._buf;
}
- _size = copy._size;
- return *this;
+ _size = other._size;
}
template<typename Timestamp>
switch (_type) {
case NOTE_ON:
DEBUG_TRACE(DEBUG::Sequence, "iterator = note on\n");
- *_event = (*_note_iter)->on_event();
+ _event->assign ((*_note_iter)->on_event());
_active_notes.push(*_note_iter);
break;
case NOTE_OFF:
DEBUG_TRACE(DEBUG::Sequence, "iterator = note off\n");
assert(!_active_notes.empty());
- *_event = _active_notes.top()->off_event();
+ _event->assign (_active_notes.top()->off_event());
// We don't pop the active note until we increment past it
break;
case SYSEX:
DEBUG_TRACE(DEBUG::Sequence, "iterator = sysex\n");
- *_event = *(*_sysex_iter);
+ _event->assign (*(*_sysex_iter));
break;
case CONTROL:
DEBUG_TRACE(DEBUG::Sequence, "iterator = control\n");
break;
case PATCH_CHANGE:
DEBUG_TRACE(DEBUG::Sequence, "iterator = program change\n");
- *_event = (*_patch_change_iter)->message (_active_patch_change_message);
+ _event->assign ((*_patch_change_iter)->message (_active_patch_change_message));
break;
default:
_is_end = true;