Thread overview
Dynamic array of strings and appending a zero length array
Jul 08, 2023
Cecil Ward
Jul 08, 2023
Cecil Ward
Jul 08, 2023
FeepingCreature
Jul 08, 2023
H. S. Teoh
Jul 09, 2023
Cecil Ward
July 08, 2023
I have a dynamic array of dstrings and I’m spending dstrings to it. At one point I need to append a zero-length string just to increase the length of the array by one but I can’t have a slot containing garbage. I thought about ++arr.length - would that work, while giving me valid contents to the final slot ?

What I first did was
   arr ~= [];

This gave no errors but it doesn’t increase the array length, so it seems. Is that a bug ? Or is it supposed to do that?

Then I tried
    arr ~= ""d;
and that did work. Is there anything more efficient that I could do instead?

I actually have an alias for the type of the strings so that they can be either dstrings or wstrings with just a recompilation. How should I then generate a zero-length string that has th correct type of dstring or wstring as I am stuck with the ‘d’-suffix on the end of the ""d at the moment. Can I just cast ? Not a reinterpret cast, but a proper value conversion?
July 08, 2023
On Saturday, 8 July 2023 at 17:15:26 UTC, Cecil Ward wrote:
> I have a dynamic array of dstrings and I’m spending dstrings to it. At one point I need to append a zero-length string just to increase the length of the array by one but I can’t have a slot containing garbage. I thought about ++arr.length - would that work, while giving me valid contents to the final slot ?
>
> [...]

s/spending/appending/
July 08, 2023

On Saturday, 8 July 2023 at 17:15:26 UTC, Cecil Ward wrote:

>

I have a dynamic array of dstrings and I’m spending dstrings to it. At one point I need to append a zero-length string just to increase the length of the array by one but I can’t have a slot containing garbage. I thought about ++arr.length - would that work, while giving me valid contents to the final slot ?

What I first did was
arr ~= [];

This gave no errors but it doesn’t increase the array length, so it seems. Is that a bug ? Or is it supposed to do that?

You can append an element to an array. You can also append an array to an array. Because [] can be an array of any type, the compiler guesses that it's an empty string[] array and appends it to no effect.

July 08, 2023
On Sat, Jul 08, 2023 at 05:15:26PM +0000, Cecil Ward via Digitalmars-d-learn wrote:
> I have a dynamic array of dstrings and I’m spending dstrings to it. At one point I need to append a zero-length string just to increase the length of the array by one but I can’t have a slot containing garbage. I thought about ++arr.length - would that work, while giving me valid contents to the final slot ?

Unlike C/C++, the D runtime always ensures that things are initialized unless you explicitly tell it not to (via void-initialization). So ++arr.length will work; the new element will be initialized to dstring.init (which is the empty string).


T

-- 
If Java had true garbage collection, most programs would delete themselves upon execution. -- Robert Sewell
July 09, 2023
On Saturday, 8 July 2023 at 20:01:08 UTC, H. S. Teoh wrote:
> On Sat, Jul 08, 2023 at 05:15:26PM +0000, Cecil Ward via Digitalmars-d-learn wrote:
>> I have a dynamic array of dstrings and I’m spending dstrings to it. At one point I need to append a zero-length string just to increase the length of the array by one but I can’t have a slot containing garbage. I thought about ++arr.length - would that work, while giving me valid contents to the final slot ?
>
> Unlike C/C++, the D runtime always ensures that things are initialized unless you explicitly tell it not to (via void-initialization). So ++arr.length will work; the new element will be initialized to dstring.init (which is the empty string).
>
>
> T

Many thanks, it might give me a slightly better result just doing ++arr.length;