/+ Michal 'GiM' Spadlinski +/
import tango.io.Stdout;
import tango.math.Random;
void blink(T, U)(T t, bool delegate(ref U) cond, void delegate(ref U) act)
{
foreach (ref a; t)
if (cond(a))
act(a);
}
class Kontener
{
private int[] data;
this (int n) {
data = new int[n];
foreach (ref x; data)
x = Random.shared.next(100);
}
int opApply(int delegate(ref int) dg)
{
int res;
foreach (ref a; data)
{
if ( (res = dg(a)) != 0 )
break;
}
return res;
}
}
void main()
{
Kontener kon = new Kontener(10);
foreach (a; kon)
Stdout (a) (" ");
Stdout.newline;
blink(kon,
(ref int b){ return b%2 == 0; },
(ref int b){ Stdout(b).newline; b+=8; } );
Stdout ("----------").newline;
foreach (a; kon)
Stdout (a).newline;
}