On Thursday, 6 August 2015 at 17:01:32 UTC, chris wrote:
since memorystream is deprecated how do i do something like this with Input and Output ranges? How can i fill up an array with ranges like you can do with streams?
Thanks.

The InputRange primitives already exist for arrays, they are located in std.array, as well as the functions to insert elements. To achieve more advanced mutations use std.algorithm.

---
import std.stdio;
import std.array;
import std.algorithm;

byte B(T)(T t){return cast(byte) t;}

struct FillerDemo
{
    private byte cnt;
    byte front(){return cnt;}
    void popFront(){++cnt;}
    @property bool empty(){return cnt == 8;}
}

void main(string[] args)
{
    auto rng = [0.B, 2.B, 4.B, 6.B, 8.B, 10.B, 12.B];
    // reads then advances, destructively
    byte val = rng.front;
    writeln(val);
    rng.popFront;
    // fills with an array
    insertInPlace(rng, 0, [-4.B, -2.B, 0.B]);
    writeln(rng);
    rng = rng.init;
    // fills with a compatible range
    insertInPlace(rng, 0, *new FillerDemo);
    writeln(rng);
    // std.algorithm
    reverse(rng);
}
---

Note, if you don't know yet, that ranges are consumed. The front is lost each time popFront() is called.


Reply via email to