Syntactic Sugar for Construction of Empty Dynamic Arrays of a Given Type
"Nordlöw"
per.nordlow at gmail.com
Sun Mar 23 07:30:49 PDT 2014
Is there a convenicene function for assigning an empty dynamic
array of a given type to a variable?
cast(int[])[];
I'm using this in ForwardDifference constructor:
auto forwardDifference(R)(R r) if (isInputRange!R)
{
import std.range: front, empty, popFront, dropOne;
struct ForwardDifference
{
R _range;
alias E = ElementType!R; // Input
ElementType
alias D = typeof(_range.front - _range.front); // Element
Difference Type. TODO: Use this as ElementType of range
D _front;
bool _initialized = false;
this(R range)
in { assert(!range.empty); }
body {
auto tmp = range;
if (tmp.dropOne.empty) // TODO: This may be an
unneccesary cost but is practical to remove extra logic
static if (isArray!R) // TODO: Construct R in a
generic way that include dynamic arrays?
_range = cast(D[])[];
else
_range = R(); // return empty range
else
_range = range; // store range internally (by
reference)
}
@property:
auto ref front() {
if (!_initialized) { popFront(); }
return _front;
}
auto ref moveFront() {
popFront();
return _front;
}
void popFront() {
if (empty is false) {
_initialized = true;
E rf = _range.front;
_range.popFront();
if (_range.empty is false)
{
_front = _range.front - rf;
}
}
}
bool empty() {
return _range.empty;
}
}
return ForwardDifference(r);
}
More information about the Digitalmars-d-learn
mailing list