On Thursday, 26 May 2016 at 21:13:14 UTC, Era Scarecrow wrote:
 To do what I want currently it's something like...

  enum Size = 1024, Other = 128;
  Data[Size][Other] staticarray;  //stack allocation
  Data[][] sliced = staticarray[];
  scan(sliced, condition);

  void scan(ref Data[][] data, Condition cond) {
    int lengths[Size];

    foreach(i; ...) {
      if (cond)
        data[i][lengths[i]++] = ...
    }

    //cleanup/shrink
    foreach(i, l; lengths)
      data[i] = data[i][0 .. l];
  }

Like this:

  static void rawlength(ref Data[] r, size_t len) {
    r = r.ptr[0..len];
  }

  void scan(ref Data[][] data, Condition cond) {
    foreach(i; ...) {
      if (cond)
        data[i].rawlength = ...
    }
  }

Reply via email to