> On 21 Aug 2014, at 12:25 pm, Quincey Morris
> <[email protected]> wrote:
>
> On Aug 20, 2014, at 20:32 , Gerriet M. Denkmann <[email protected]> wrote:
>
>> But I thought that maybe memmove might be more efficient:
>>
>> let dest : UnsafeMutablePointer<Void> = arr + lowerIndex + 1
>
> Er, no. There are multiple things wrong with this:
>
> — There’s nothing in the Swift array API contract that says that elements are
> stored in a contiguous block of memory, or even in several blocks of memory
>
> — Even if they were, there’s nothing that says how they’re laid out in that
> memory
>
> — Even if there was, there’s nothing that gives you access to that memory
> (well, AFAIK)
>
> — Even if there was, the use of ‘arr’ as a pointer to the start of the memory
> is a C-ism, and doesn’t apply to an array variable in Swift.
>
> If you want to do this sort of thing, you’re going to have to cause your own
> block of memory to be allocated (e.g. in a NSData object). Alternatively, you
> could code the move as you originally did, and trust that at some point the
> Swift compiler will understand what you’re doing and optimize it for you.
>
>
All that he said. Reinforcing the last point as well. There's really little
point writing C in Swift.
And for completeness (surely you've found this by now) alt-click "Jump To
Definition' on an Array takes you to a treasure trove of methods which will let
you break yourself in 16 different ways. The second of these looked
particularly promising as a wrecking ball.
extension Array {
/// Call body(p), where p is a pointer to the Array's contiguous storage
func withUnsafeBufferPointer<R>(body: (UnsafeBufferPointer<T>) -> R) -> R
mutating func withUnsafeMutableBufferPointer<R>(body: (inout
UnsafeMutableBufferPointer<T>) -> R) -> R
}
UnsafeMutableBufferPointers appear to have a way to get generally
UnsafeMutablePointers out of them so that's one route to the raw memory
corruption you seek.
_______________________________________________
Cocoa-dev mailing list ([email protected])
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]