Is there any way to check if array is dense or not?

Mariusz `shd` Gliwiński" <alienballance at gmail.com> Mariusz `shd` Gliwiński" <alienballance at gmail.com>
Mon Nov 11 06:31:35 PST 2013


On Monday, 11 November 2013 at 00:16:31 UTC, bearophile wrote:
> Built-in D arrays are always dense (unless you consider the 
> associative arrays). That page should name them "contiguous".

 From the wiki article, "when all the dimensions of the array are 
known at compile-time, the array is automatically implemented as 
dense array".

My understanding is:
1) Every static array is contigous.
2) If all dimensions lengths can be "known at compile time" the 
array is contigous
3) If array is allocated using the method from wiki article the 
array is contigous

In all other cases it's not.
Now, i'd like to have a function to ask for any of this 
conditions to be met. Especially point 2) should be implemented 
in standard library instead of my custom code.

> If you want to tell apart a regular dynamic array from the 
> contiguous one, you have to look at the array structure, all 
> dimensions but the last one need to be fixed-sized arrays.
So it's not contigous http://dpaste.dzfl.pl/7c5d2fa8 ?

> Why do you need this information? So far I have not needed it.

There are two (not so important) reasons.
1. I'd like to use `1 memcpy(m*n)` instead of `m memcpy(n)`.
2. I'd like make a clean distinction in my code between contigous 
and non-contigous arrays. The goal is to use contigous arrays in 
every case when i don't need to resize inner arrays.


More information about the Digitalmars-d-learn mailing list