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 = ...
}
}