I believe a growing stack like GrowBuffer?, but templated to build array of any type not just char[], would be useful. Yes, it only takes few lines to write one but when reused these lines grow... Mine looks like this (I think it doesn't work for non-class type, I haven't tested really):
class SimpleStack(T)
{
this(int step=5){this.step=step<=0?1:step;}
void push(T item)
{
if(pointer==stack.length) stack.length=stack.length+step;
stack[pointer++]=item;
}
T unpush()
{
T ret=pop();
if(stack.length) stack.length=stack.length-1;
return ret;
}
T pop()
{
T ret=last();
if(pointer>0) --pointer;
return ret;
}
T last()
{
if(stack.length) return stack[pointer-1];
else return T.init;
}
int length(){return pointer;}
int size(){return stack.length;}
T[] useful(){return stack[0..pointer];}
void empty(){if(stack.length) delete stack;}
private:
int step;
int pointer;
T[] stack;
}