Andrei Alexandrescu wrote: > template SuperStack(T) { > private T[] buffer; > private enum slackfactor = 2.5; > > T[] getBuffer(size_t n) { > buffer.length = buffer.length + n; > return buffer[$ - n .. $]; > } > > void releaseBuffer(T[] b) { > enforce(b is buffer[$ - b.length .. $]); > buffer.length = buffer.length - b.length; > if (gc.capacity(buffer) > buffer.length * slackfactor) { > // Reallocate buffer to allow collection of slack > buffer = buffer.dup; > } > } > }
Broken design is broken. SuperStack!int stack; auto buffer0 = stack.getBuffer(100); auto buffer1 = stack.getBuffer(10000000); // Reallocates internal array. stack.releaseBuffer(buffer1); stack.releaseBuffer(buffer0); // Assertion failure. -- Rainer Deyke - rain...@eldwood.com