+ _events.insert (_events.begin(), nascent_events.begin(), nascent_events.end());
+
+ } else if (ninfo->start_time > _events.back()->when) {
+
+ /* all points in nascent are after the last existing point */
+
+ _events.insert (_events.end(), nascent_events.begin(), nascent_events.end());
+
+ } else {
+
+ /* find the range that overlaps with nascent events,
+ and insert the contents of nascent events.
+ */
+
+ iterator i;
+ iterator range_begin = _events.end();
+ iterator range_end = _events.end();
+ double end_value = unlocked_eval (ninfo->end_time);
+ double start_value = unlocked_eval (ninfo->start_time - 1);
+
+ need_adjacent_end_clamp = true;
+ need_adjacent_start_clamp = true;
+
+ for (i = _events.begin(); i != _events.end(); ++i) {
+
+ if ((*i)->when == ninfo->start_time) {
+ /* existing point at same time, remove it
+ and the consider the next point instead.
+ */
+ i = _events.erase (i);
+
+ if (i == _events.end()) {
+ break;
+ }
+
+ if (range_begin == _events.end()) {
+ range_begin = i;
+ need_adjacent_start_clamp = false;
+ } else {
+ need_adjacent_end_clamp = false;
+ }
+
+ if ((*i)->when > ninfo->end_time) {
+ range_end = i;
+ break;
+ }
+
+ } else if ((*i)->when > ninfo->start_time) {
+
+ if (range_begin == _events.end()) {
+ range_begin = i;
+ }
+
+ if ((*i)->when > ninfo->end_time) {
+ range_end = i;
+ break;
+ }