Skip to content

Commit

Permalink
feat: Add enumerator for equalizer
Browse files Browse the repository at this point in the history
  • Loading branch information
angelobreuer committed Aug 15, 2023
1 parent dbd63f7 commit 3898ec7
Showing 1 changed file with 52 additions and 2 deletions.
54 changes: 52 additions & 2 deletions src/Lavalink4NET/Filters/Equalizer.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
namespace Lavalink4NET.Filters;

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Size = EqualizerData.Size)]
public sealed record class Equalizer
public sealed record class Equalizer : IEnumerable<float>
{
public const int Bands = 15; // 0-14

Expand Down Expand Up @@ -121,6 +124,10 @@ public float this[int band]

public static Builder CreateBuilder() => default;

public IEnumerator<float> GetEnumerator() => new Enumerator(_data);

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

public struct Builder
{
private EqualizerData _equalizer;
Expand Down Expand Up @@ -236,7 +243,7 @@ internal struct EqualizerData

public unsafe fixed float Data[Equalizer.Bands];

private unsafe ref float GetBand(int band)
public unsafe ref float GetBand(int band)
{
if (band is < 0 or >= Equalizer.Bands)
{
Expand All @@ -254,4 +261,47 @@ public float this[int band]
get => GetBand(band);
set => GetBand(band) = Math.Clamp(value, -0.25F, 1.0F);
}
}

file sealed class Enumerator : IEnumerator<float>
{
private readonly EqualizerData _data;
private int _index;

public Enumerator(EqualizerData data)
{
_data = data;
_index = -1;
}

public bool MoveNext()
{
var index = _index + 1;

if (index < Equalizer.Bands)
{
_index = index;
return true;
}

return false;
}

public void Reset()
{
_index = -1;
}

public void Dispose()
{
// no-op
}

public float Current
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => _data.GetBand(_index);
}

object IEnumerator.Current => Current;
}

0 comments on commit 3898ec7

Please sign in to comment.