On Thursday, 12 May 2022 at 17:06:39 UTC, Ali Çehreli wrote:
I don't care whether it is good practice or not. :) The following is what you meant anyway and seems to work.

I restricted the parameter types to the ones I wanted to use.
And for the standard iota behavior I used a public import.

    public import std.range : iota;

    auto iota(in DateTime begin, in DateTime end, in Time step){
//https://forum.dlang.org/post/ivskeghrhbuhpiyte...@forum.dlang.org -> Ali's solution

      static struct Result{
        DateTime current, end;
        Time step;

        @property bool empty(){ return current >= end; }
        @property auto front(){ return current; }
        void popFront(){ assert(!empty); current += step; }
      }

      return Result(begin, end, step);
    }

    ...

    iota(st, en, day).each!writeln; //works
    iota(1, 10, 0.5).each!writeln;  //also works

It works perfectly, Thank You very much!

Although that general implementation of iota is a bit complex for me, this specialized one is simple.

note(0): no cast() was needed here, worked with a const DateTime{ ulong ticks; ... }

Reply via email to