I wanted to switch to std.container.Array but it doesn't seem to
mimic [] for some odd ball reason. I threw this class together
and it seems to work.
The only problem is that I can't do
carray.length -= 1;
I can't override `-=` because that is on the class. can I
override it for length somehow or do I have to create a length
wrapper class that has it overridden in it? Or is there a way to
do it in cArray?
Basically I want to support code that does something like
auto x = [];
x.length -= 1;
and not have to rewrite that to x.length = x.length - 1;
public class cArray(T)
{
Array!T data;
public void assumeSafeAppend() { };
public @property int length()
{
return data.length;
}
public @property int length(int len)
{
for(int i = 0; i < len; i++)
data.removeBack();
return data.length;
}
ref T opIndex(int i) { return data[i]; }
@property int opDollar(size_t dim : 0)() { return
data.length; }
this() { data = Array!T(); }
int opApply(int delegate(ref T) dg)
{
int result = 0;
for (int i = 0; i < data.length; i++)
{
result = dg(data[i]);
if (result)
break;
}
return result;
}
int opApplyReverse(int delegate(ref T) dg)
{
int result = 0;
for (int i = 0; i < data.length; i++)
{
result = dg(data[i]);
if (result)
break;
}
return result;
}
void opOpAssign(string op)(T d)
{
if (op == "~")
{
data ~= d;
}
}
bool canFind(T)(T d)
{
for(int i = 0; i < data.length; i++)
{
if (data[i] == d)
return true;
}
return false;
}
}