Is it possible to append to a local buffer without reallocating?
Steven Schveighoffer
schveiguy at yahoo.com
Thu Jan 11 17:12:19 UTC 2018
On 1/11/18 6:21 AM, tipdbmp wrote:
> string push_stuff(char[] buf, int x) {
> if (x == 1) {
> buf ~= 'A';
> buf ~= 'B';
> buf ~= 'C';
> return cast(string) buf[0 .. 3];
> }
> else {
> buf ~= 'A';
> buf ~= 'B';
> return cast(string) buf[0 .. 2];
> }
> }
>
> void foo() {
> {
> char[2] buf;
> string result = push_stuff(buf, 1);
> assert(buf.ptr != result.ptr);
> }
>
> {
> char[2] buf;
> string result = push_stuff(buf, 0);
> assert(buf.ptr == result.ptr); // <-- this assert fails
> }
> }
>
Appender is able to do this:
import std.array;
void main()
{
char[2] buf;
auto app = appender(buf[]);
app.clear; // resets the buffer so it can be used again.
app ~= 'A';
app ~= 'B';
assert(buf[] == "AB");
assert(app.data.ptr == buf.ptr);
app ~= 'C';
assert(app.data.ptr != buf.ptr);
}
-Steve
More information about the Digitalmars-d-learn
mailing list