User defined type and foreach

Tony tonytdominguez at aol.com
Sat Nov 18 05:37:32 UTC 2017


On Saturday, 18 November 2017 at 05:24:30 UTC, Tony wrote:

Forgot to handle pre-mature foreach exit:

import std.stdio : writeln;

class RefRange {
     int foreach_index;
     int[] items;
     this(int[] src)
     {
        items = src;
     }

     bool empty()
     {
        if (foreach_index == items.length)
        {
	  foreach_index = 0; // reset for another foreach
	  return true;
        }
        return false;
     }
     int front() { return items[foreach_index]; }
     void popFront() { foreach_index++; }
     void resetIteration() { foreach_index = 0; }
}

void main() {

     int[] ints = [1, 2, 3];
     auto refRange = new RefRange(ints);

     writeln("Ref 1st Run:");
     foreach(i; refRange)
     {
        writeln(i);
        if ( i == 2 )
        {
	  refRange.resetIteration();
           break;
        }
     }
     assert( ! refRange.empty);
     writeln("Ref 2nd Run:");
     foreach(i; refRange) writeln(i); // works
}
-------------------------------
Ref 1st Run:
1
2
Ref 2nd Run:
1
2
3



More information about the Digitalmars-d-learn mailing list