Bug 19259 – std.array.Appender needs a way to set/get the length

Status
NEW
Severity
enhancement
Priority
P4
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2018-09-22T22:25:15Z
Last change time
2024-12-01T16:34:12Z
Keywords
pull
Assigned to
No Owner
Creator
Jonathan Marler
Moved to GitHub: phobos#10351 →

Comments

Comment #0 by johnnymarler — 2018-09-22T22:25:15Z
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.
Comment #1 by dlang-bot — 2022-04-16T14:09:39Z
@ljmf00 updated dlang/phobos pull request #8432 "feat(array): add .length property" fixing this issue: - feat(array): add .length property This patch adds a .length property to either get and set the length of the managed array. Fix issue 19259. Reference: https://issues.dlang.org/show_bug.cgi?id=19259 Signed-off-by: Luís Ferreira <[email protected]> https://github.com/dlang/phobos/pull/8432
Comment #2 by robert.schadek — 2024-12-01T16:34:12Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/10351 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB