/** DGui project file.

Copyright: Trogu Antonio Davide 2011-2013

License: $(HTTP boost.org/LICENSE_1_0.txt, Boost License 1.0).

Authors: Trogu Antonio Davide
*/
module dgui.core.events.event;

struct Event(T1, T2)
{
	private alias void delegate(T1, T2) SlotDelegate;
	private alias void function(T1, T2) SlotFunction;

	private SlotDelegate[] _slotDg;
	private SlotFunction[] _slotFn;

	public alias opCall call;

	public void opCall(T1 t1, T2 t2)
	{
		synchronized
		{
			for(int i = 0; i < this._slotDg.length; i++)
			{
				this._slotDg[i](t1, t2);
			}

			for(int i = 0; i < this._slotFn.length; i++)
			{
				this._slotFn[i](t1, t2);
			}
		}
	}

	public void attach(SlotDelegate dg)
	{
		if(dg)
		{
			this._slotDg ~= dg;
		}
	}

	public void attach(SlotFunction fn)
	{
		if(fn)
		{
			this._slotFn ~= fn;
		}
	}
}