April 08, 2023

İyi hafta sonları 😀

Eski yazdıklarımı karıştırıyordum! Bundan tam 10 sene önce aşağıdaki kodu implement etmişim! Kabul, biraz garip ve de alışılmışın dışında...

Ama sürekli yenilenen bufferStack mantığında (eskisinde tersten ve yine FIFO yapmak için int index kullanmışım!) çok işlevsel ve ultra compact bir struct. Sadece opCall() ve opSlice() kullanıldı. Benim çok işime yaradı, adeta hızır gibi yetişti. Belki projenizde işinizi kolaylaştıracaktır:

struct RotativeStaticArray(size_t length)
{
  size_t index;
  int[length] arr;

  this(A)(A[] data)
  {
    import std.algorithm : copy;
    data.copy(arr[]);
  }

  ref auto opCall(int n)
  {
    if(index == length)
    {
      index = 0;
    }
    return arr[index++] = n;
  }

  auto opSlice()
  {
    return arr;
  }
}

alias SArray3int = RotativeStaticArray!3;
import std.stdio;

void main()
{
  SArray3int dene1;

  foreach(num; [2,0,2,3])
  {
    dene1(num).writeln("-> ", dene1[]);
  }

  auto arr = SArray3int([1,2,3]);
       arr[].writeln;             // "[1, 2, 3]"
       arr(0);
       arr[].writeln;             // "[0, 2, 3]"

  writeln(arr(0), arr(0));        // "00"
  assert(arr[] == [0, 0, 0]);
}

HOŞÇA KALIN...