[Issue 19259] New: std.array.Appender needs a way to set the length
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Sep 22 22:25:15 UTC 2018
https://issues.dlang.org/show_bug.cgi?id=19259
Issue ID: 19259
Summary: std.array.Appender needs a way to set the length
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: enhancement
Priority: P2
Component: phobos
Assignee: nobody at puremagic.com
Reporter: johnnymarler at gmail.com
std.array.Appender needs a way to extend/add to the length of `data`. See the
following use case:
```
uint tryAppendFullPathNameImpl(const(wchar)* nullTerminatedPath,
Appender!(wchar[]) builder)
{
import core.sys.windows.winbase : GetFullPathNameW;
auto prefixLength = builder.data.length;
for (;;)
{
const result = GetFullPathNameW(nullTerminatedPath, builder.capacity -
prefixLength,
builder.data.ptr + prefixLength, null);
if (result <= (builder.capacity - prefixLength))
{
// NO WAY TO DO THIS:
//builder.overrideDataLength(prefixLength + result);
return result;
}
builder.reserve(prefixLength + result);
}
}
```
What's happening here is we are passing the Appender array to a C function that
populates the array with our resuling "full path". Note that this
implementation is taken from .NET CoreFX:
https://github.com/dotnet/corefx/blob/1bff7880bfa949e8c5e46039808ec412640bbb5e/src/Common/src/CoreLib/System/IO/PathHelper.Windows.cs#L72
The problem is that once it's populated, we have no way of extending the length
of the array after it was populated by the C function.
--
More information about the Digitalmars-d-bugs
mailing list