Removing an array element in order?
Sean Kelly
sean at f4.ca
Sun Jul 2 23:21:59 PDT 2006
Oskar Linde wrote:
> 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.
I should have just checked the spec :-) Thanks!
So I suppose memmove is probably optimal in this case?
Sean
More information about the Digitalmars-d-learn
mailing list