Removing an array element in order?

Oskar Linde oskar.lindeREM at OVEgmail.com
Sun Jul 2 22:55:03 PDT 2006


Sean Kelly wrote:
> Assuming I want to remove an element in an array and preserve order, 
> does the D spec consider it legal to do this:
> 
>     char[] str = "abc def";
>     int    pos = 3;
>     str[pos .. $-1] = str[pos+1 .. $];
>     str.length = str.length - 1;
>     assert( memcmp( &str[0], "abcdef", str.length ) );
> 
> Or are slice copy semantics equivalent to memcpy where overlapping 
> regions are not allowed?

As far as I understand, slice copying is equivalent to memcopy and 
overlapping copies are illegal. According to the spec:

(http://www.digitalmars.com/d/arrays.html)
Under Array Copying:

""
Overlapping copies are an error:

s[0..2] = s[1..3];	// error, overlapping copy
s[1..3] = s[0..2];	// error, overlapping copy

Disallowing overlapping makes it possible for more aggressive parallel 
code optimizations than possible with the serial semantics of C.
""

/Oskar



More information about the Digitalmars-d-learn mailing list