using System; using System.Collections; using System.Collections.Generic; namespace OE.ALGA.Paradigmak { public class FeltetelesFeladatTarolo : FeladatTarolo, IEnumerable where T : IVegrehajthato { public Func BejaroFeltetel { get; set; } public bool Igaz(T t) { return true; } public FeltetelesFeladatTarolo(int l) : base(l) { BejaroFeltetel = Igaz; } public void FeltetelesVegrehajtas(Func feltetel) { foreach (T t in tarolo) { if (t != null && feltetel(t)) { t.Vegrehajtas(); } } } new public IEnumerator GetEnumerator() { FeltetelesFeladatTaroloBejaro bejaro = new FeltetelesFeladatTaroloBejaro(tarolo, n, BejaroFeltetel); return bejaro.GetEnumerator(); } } public class FeltetelesFeladatTaroloBejaro : IEnumerator where T : IVegrehajthato { T[] tarolo; int n; int aktualisindex; public Func Feltetel { get; } public T Current { get { return tarolo[aktualisindex]; } } public FeltetelesFeladatTaroloBejaro(T[] tarolo, int n, Func feltetel) { this.tarolo = tarolo; this.n = n; aktualisindex = 0; Feltetel = feltetel; } object IEnumerator.Current => throw new NotImplementedException(); public IEnumerator GetEnumerator() { foreach (T t in tarolo) { if (t != null && Feltetel(t)) { yield return t; } } } public void Dispose() { throw new NotImplementedException(); } public bool MoveNext() { if (aktualisindex < n - 1) { aktualisindex++; if (Feltetel(tarolo[aktualisindex])) { return true; } return MoveNext(); } else { return false; } } public void Reset() { aktualisindex = -1; } } }