aboutsummaryrefslogtreecommitdiffziptar.gz
path: root/src/Godosa.Core/Runs/HeadlessLoop.cs
blob: fc21b417fc91d4543455fb9d54f746403093208f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace Godosa.Core.Runs;

/// <summary>Runs frames as fast as possible: <c>frame(n)</c> for n = 1, 2, … until it returns false, <paramref name="frames"/>
/// is reached, or <paramref name="cap"/> (Capped = true).</summary>
public static class HeadlessLoop
{
    public const long DefaultCap = 100_000;

    public static (long Frames, bool Capped) Run(Func<long, bool> frame, long? frames, long cap = DefaultCap)
    {
        for (long n = 1; ; n++)
        {
            if (n > cap)
                return (cap, true);
            var more = frame(n);
            if (!more || n == frames)
                return (n, false);
        }
    }
}