/* * Copyright (c) 2012-2015, Isode Limited, London, England. * All rights reserved. */ package com.isode.stroke.signals; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import com.isode.stroke.signals.SignalConnection; import com.isode.stroke.signals.Slot; /** * An approximation of the boost::signals system with 4 parameters * @param Type 1 * @param Type 2 * @param Type 3 * @param Type 4 */ public class Signal7 { private final Map > binds_ = Collections.synchronizedMap( new HashMap >()); /** * Add a slot which will be notified * @param bind slot, not null * @return signal connection */ public SignalConnection connect(Slot7 bind) { final SignalConnection connection = new SignalConnection(); binds_.put(connection, bind); connection.onDestroyed.connect(new Slot() { public void call() { binds_.remove(connection); } }); return connection; } /** * Notify all slots(listeners) * @param p1 parameter value 1 * @param p2 parameter value 2 * @param p3 parameter value 3 * @param p4 parameter value 4 */ public void emit(T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7) { List> binds = new ArrayList>(); binds.addAll(binds_.values()); for (Slot7 bind : binds) { bind.call(p1, p2, p3, p4, p5, p6, p7); } } /** * Remove all slots(listeners) */ public void disconnectAll() { binds_.clear(); } }