13
0

protect use of iterators across routeUI selection when operations change the selection (e.g. deletion)

This commit is contained in:
Paul Davis 2014-06-30 11:02:23 -04:00
parent 890ea91920
commit 1f695014b4

View File

@ -46,41 +46,54 @@ public:
template <typename Function> template <typename Function>
void foreach_route_ui (Function f) { void foreach_route_ui (Function f) {
for (iterator i = begin(); i != end(); ++i) { for (iterator i = begin(); i != end(); ) {
iterator tmp = i;
++tmp;
RouteUI* t = dynamic_cast<RouteUI*> (*i); RouteUI* t = dynamic_cast<RouteUI*> (*i);
if (t) { if (t) {
f (t); f (t);
} }
i = tmp;
} }
} }
template <typename Function> template <typename Function>
void foreach_route_time_axis (Function f) { void foreach_route_time_axis (Function f) {
for (iterator i = begin(); i != end(); ++i) { for (iterator i = begin(); i != end(); ) {
iterator tmp = i;
++tmp;
RouteTimeAxisView* t = dynamic_cast<RouteTimeAxisView*> (*i); RouteTimeAxisView* t = dynamic_cast<RouteTimeAxisView*> (*i);
if (t) { if (t) {
f (t); f (t);
} }
i = tmp;
} }
} }
template <typename Function> template <typename Function>
void foreach_audio_time_axis (Function f) { void foreach_audio_time_axis (Function f) {
for (iterator i = begin(); i != end(); ++i) { for (iterator i = begin(); i != end(); ) {
iterator tmp = i;
++tmp;
AudioTimeAxisView* t = dynamic_cast<AudioTimeAxisView*> (*i); AudioTimeAxisView* t = dynamic_cast<AudioTimeAxisView*> (*i);
if (t) { if (t) {
f (t); f (t);
} }
i = tmp;
} }
} }
template <typename Function> template <typename Function>
void foreach_midi_time_axis (Function f) { void foreach_midi_time_axis (Function f) {
for (iterator i = begin(); i != end(); ++i) { for (iterator i = begin(); i != end(); ) {
iterator tmp = i;
++tmp;
MidiTimeAxisView* t = dynamic_cast<MidiTimeAxisView*> (*i); MidiTimeAxisView* t = dynamic_cast<MidiTimeAxisView*> (*i);
if (t) { if (t) {
f (t); f (t);
} }
i = tmp;
} }
} }