var CountWaiterStatics = {};
CountWaiterStatics.CountWaiterMode = {"Simple":0,"WaitForGo":1};
class CountWaiter
{
constructor(mode /*CountWaiter.CountWaiterMode*/)
{
this.callback = null;
this.count = 0;
this.started = false;
this.mode = CountWaiterStatics.CountWaiterMode.Simple;
this.param = null;
if (mode !== undefined) this.mode = mode;
}
init(callback /*Action<T>*/, mode /*CountWaiter.CountWaiterMode*/, param /*T*/)
{
if (mode === undefined) mode = this.mode;
if (param === undefined) param = null;
this.mode = mode;
this.callback = callback;
this.param = param;
this.count = 0;
this.started = (mode == CountWaiterStatics.CountWaiterMode.Simple);
}
wait()
{
this.count++;
}
waitMany(num /*int*/)
{
this.count += num;
}
waitDone()
{
this.count--;
if (this.started)
{
this.checkDone();
}
}
checkDone()
{
if (this.count == 0)
{
var tmp = this.callback;
var tmpParam = this.param;
this.callback = null;
this.param = null;
if (tmp != null) tmp(tmpParam);
}
}
go()
{
this.started = true;
this.checkDone();
}
clear()
{
this.started = false;
this.callback = null;
this.count = 0;
this.param = null;
}
}