Array Appenders

Nick Sabalausky a at a.a
Fri Apr 10 00:00:01 PDT 2009


"Denis Koroskin" <2korden at gmail.com> wrote in message 
news:op.ur2f3rglo7cclz at korden-pc...
> On Wed, 08 Apr 2009 15:04:29 +0400, Frits van Bommel 
> <fvbommel at remwovexcapss.nl> wrote:
>
>> Andrei Alexandrescu wrote:
>>> Denis Koroskin wrote:
>>>> Well, actually I think that having an Appender object is an overkill. 
>>>> I never use, although I wrote a few implementations. Instead, I found 
>>>> the following method to be extemely handy, very fast and cover all my 
>>>> cases:
>>>>
>>>> void append(T)(T[] array, ref size_t index, T value)
>>>> {
>>>>    assert(array.length >= index);
>>>>    if (array.length == index) {
>>>>        array.length = array.length * 2;
>>>>    }
>>>>        array[index++] = value;
>>>> }
>>>  I'm pretty sure you meant to pass array by reference.
>>
>> It also breaks when the array is empty.
>
> Yeah, I was writing from memory and could (and did!) introduce bugs.
>
> My intend was to show an easy way of appending to array without use of a 
> special Appender struct. I use it /very/ often and believe it belongs to 
> std.array.
>

A lot of code doesn't expect extra "unofficial" elements at the end of an 
array. Any such code would break if that append had been used on the array 
it's operating on. In my experience, such code occurs often enough to make 
that a dangerous strategy. You could be careful and make sure all your code 
is designed in a way that accomodates such extra "allocated-but-unused" 
elements, but for all the bother that would be, you might as well just use a 
real .length/.capacity solution. 





More information about the Digitalmars-d mailing list