better than union and array questions

Saaa no at bo.dy
Sat Sep 19 21:40:18 PDT 2009


bearophile Wrote:

> Saaa:
> 
> > Is there a better way to support arrays of any type?
> > Currently all the code working with these Structs are templated with loads 
> > of static ifs in them.
> 
> You have to ask a more precise question if you want an answer.
Maybe a more general one :)
I use a tagged union scheme to encapsulate different types(arrays) as one type. Accessing the arrays thus always need a type-check, plus I need multiple get/setArray functions (or one template with loads of static ifs). 
Is there maybe a general scheme which results in the same type support without the all the separate type handling hassle?

> 
> > Also, is it possible to add a .deepdup property to all arrays?
> 
> D devs don't read posts here, so you have to ask ask in the main newsgroup. I have asked for that more than a year ago, and I was ignored, as usual.

Two might not be a front, at least they make a line. 
 
> > Will "a[]=b.dup;" copy b twice?
> 
> When you have questions like this it's good to take a look at the produced asm.
> The dup allocates a new array and then copies data on it.
> The a[]=b[]; copies b on a.
By 'copies b on a' you mean only the length and pointer, right.
How do you produce asm? Not that I can read it but it would be a nice way to start learning it a bit.
> 
> 
> > int[] array;
> > array.length = 100;
> > array.length = 0;
> > //no other arrays pointing/slicing to this array
> > This way I can be sure for the following 100 element concatenations
> > the array won't be copied.
> > Or isn't this implicitly part of the D spec? 
> 
> Are you talking about appends or concatenations? Concatenations produce memory allocations. But you probably mean 100 appends. Those 100 appends will not produce allocations or copies.
> But generally array appends are slow anyway in D, so where you need to do them quickly it's much better to use an ArrayBuilder like the one in my dlibs, of a similar one a bit less efficient in Phobos of D2.

Dlibs license doesn't like my commercial project :) 
(also, deprecated)

ByeBye and thanks,
Saaa


More information about the Digitalmars-d-learn mailing list