Report a bug
If you spot a problem with this page, click here to create a GitHub issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

mir.appender

Scoped Buffer

License:
Authors:
Ilya Yaroshenko
struct ScopedBuffer(T, size_t bytes = 4096) if (bytes && (T.sizeof <= bytes));

@trusted auto scopedBuffer(T, size_t bytes = 4096)();
The buffer uses stack memory and C Runtime to allocate temporal memory.
Shouldn't store references to GC allocated data.
Examples:
auto buf = scopedBuffer!char;
buf.put('c');
buf.put("str");
assert(buf.data == "cstr");

buf.popBackN(2);
assert(buf.data == "cs");
Examples:
immutable
auto buf = scopedBuffer!(immutable char);
buf.put('c');
buf.put("str");
assert(buf.data == "cstr");

buf.popBackN(2);
assert(buf.data == "cs");
void shrinkTo(size_t length);
const @property scope size_t length();
void popBackN(size_t n);
scope @safe void put(T e);
scope void put(ref R e);
scope void put(scope R[] e);
scope void put(Iterable)(Iterable range)
if (isIterable!Iterable && !__traits(isStaticArray, Iterable) && (!isArray!Iterable || hasElaborateAssign!T));
nothrow scope void reset();
nothrow @nogc scope @system void initialize();
inout @property scope @safe inout(T)[] data();
@system void moveDataAndEmplaceTo(T[] array);
Copies data into an array of the same length using memcpy C routine. Shrinks the length to 0.
struct UnsafeArrayBuffer(T);
Examples:
char[4] array;
auto buf = UnsafeArrayBuffer!char(array);
buf.put('c');
buf.put("str");
assert(buf.data == "cstr");

buf.popBackN(2);
assert(buf.data == "cs");
T[] buffer;
size_t length;
void put(T a);
void put(E[] a);
inout @property scope @safe inout(T)[] data();
void popBackN(size_t n);