Skip to content

Commit

Permalink
return iterator rather than array
Browse files Browse the repository at this point in the history
This is only iterated over once, I don't know why it was implemented as an array originally
  • Loading branch information
blowfishpro committed Nov 11, 2018
1 parent f009336 commit ea89e1a
Showing 1 changed file with 12 additions and 18 deletions.
30 changes: 12 additions & 18 deletions ModuleManager/PatchList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -125,34 +125,28 @@ public PatchList(IEnumerable<string> modList, IEnumerable<IPatch> patches, IPatc
}
}

public ArrayEnumerator<IPass> GetEnumerator() => new ArrayEnumerator<IPass>(EnumeratePasses());
IEnumerator<IPass> IEnumerable<IPass>.GetEnumerator() => GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();

private IPass[] EnumeratePasses()
public IEnumerator<IPass> GetEnumerator()
{
IPass[] result = new IPass[modPasses.Count * 4 + 3];

result[0] = firstPatches;
result[1] = legacyPatches;
yield return firstPatches;
yield return legacyPatches;

for (int i = 0; i < modPasses.Count; i++)
foreach (ModPass modPass in modPasses)
{
result[i * 3 + 2] = modPasses[i].beforePass;
result[i * 3 + 3] = modPasses[i].forPass;
result[i * 3 + 4] = modPasses[i].afterPass;
yield return modPass.beforePass;
yield return modPass.forPass;
yield return modPass.afterPass;
}

for (int i = 0; i < modPasses.Count; i++)
foreach (ModPass modPass in modPasses)
{
result[2 + (modPasses.Count * 3) + i] = modPasses[i].lastPass;
yield return modPass.lastPass;
}

result[result.Length - 1] = finalPatches;

return result;
yield return finalPatches;
}

IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();

private void EnsureMod(string mod)
{
if (mod == null) throw new ArgumentNullException(nameof(mod));
Expand Down

0 comments on commit ea89e1a

Please sign in to comment.