mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 18:27:23 +01:00
Add struct enumerator to PartyList
This commit is contained in:
parent
a48eead85e
commit
d1dc81318a
1 changed files with 36 additions and 10 deletions
|
|
@ -133,18 +133,44 @@ internal sealed partial class PartyList
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public IEnumerator<IPartyMember> GetEnumerator()
|
public IEnumerator<IPartyMember> GetEnumerator()
|
||||||
{
|
{
|
||||||
// Normally using Length results in a recursion crash, however we know the party size via ptr.
|
return new Enumerator(this);
|
||||||
for (var i = 0; i < this.Length; i++)
|
|
||||||
{
|
|
||||||
var member = this[i];
|
|
||||||
|
|
||||||
if (member == null)
|
|
||||||
break;
|
|
||||||
|
|
||||||
yield return member;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
IEnumerator IEnumerable.GetEnumerator() => this.GetEnumerator();
|
IEnumerator IEnumerable.GetEnumerator() => this.GetEnumerator();
|
||||||
|
|
||||||
|
private struct Enumerator(PartyList partyList) : IEnumerator<IPartyMember>
|
||||||
|
{
|
||||||
|
private int index = 0;
|
||||||
|
|
||||||
|
public IPartyMember Current { get; private set; }
|
||||||
|
|
||||||
|
object IEnumerator.Current => this.Current;
|
||||||
|
|
||||||
|
public bool MoveNext()
|
||||||
|
{
|
||||||
|
if (this.index == partyList.Length) return false;
|
||||||
|
|
||||||
|
for (; this.index < partyList.Length; this.index++)
|
||||||
|
{
|
||||||
|
var partyMember = partyList[this.index];
|
||||||
|
if (partyMember != null)
|
||||||
|
{
|
||||||
|
this.Current = partyMember;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Reset()
|
||||||
|
{
|
||||||
|
this.index = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue