~Signal_v1_Generic() { for (SlotIterator slot_it = slots.begin(); slot_it != slots.end(); slot_it++) { Slot slot = *slot_it; slot->release_signal_ref(owner); } }
void catch_final(Signal_v1_Generic *data, std::list<SlotIterator> &remove_slots) { data->in_call_remove_slots = 0; // remove all slots no longer connected to any Slot. typename std::list<SlotIterator>::iterator remove_it; for (remove_it = remove_slots.begin(); remove_it != remove_slots.end(); remove_it++) { Slot slot = **remove_it; slot->release_signal_ref(this); data->slots.erase(*remove_it); } data->in_call = false; if (data->deleted) delete data; }
//: Disconnect void disconnect(::Slot &disconnect_slot) { for (SlotIterator slot_it = impl->slots.begin(); slot_it != impl->slots.end();) { Slot slot = *slot_it; if (disconnect_slot.impl == slot) { if (impl->in_call) { impl->in_call_remove_slots->push_back(slot_it); ++slot_it; } else { slot->release_signal_ref(this); slot_it = impl->slots.erase(slot_it); } } else ++slot_it; } }