> On May 12, 2016, at 8:41 AM, Joe Groff <[email protected]> wrote:
>
>> Future improvements
>>
>> UnsafeBytePointer should eventually support unaligned memory access. I
>> believe that we will eventually have a modifier that allows "packed" struct
>> members. At that time we may also want to add a "packed" flag to
>> UnsafeBytePointer's load and initialize methods.
>
> We should probably call out the fact that `load` and `initialize` require
> alignment in the meantime.
Will do.
>> When accessing a memory buffer, it is generally convenient to cast to a type
>> with known layout and compute offsets relative to the type's size. This is
>> how UnsafePointer<Pointee> works. A generic UnsafeTypePunnedPointer<Pointee>
>> could be introduced with the same interface as UnsafePointer<Pointer>, but
>> without the strict aliasing requirements. This seems like an overdesign
>> simply to avoid calling strideof() in an rare use case, but nothing prevents
>> adding this type later.
>
> This need could also be addressed with some additional convenience methods on
> UnsafeBytePointer to load or store at a given index, something like:
>
> func load<T>(asArrayOf type: T.Type, at index: Int) -> T {
> return (self + strideof(T) * index).load(T)
> }
> func initialize(asArrayOf type: T.Type, initialValue: T, at index: Int)
> {
> return (self + strideof(T) * index).initialize(initialValue)
> }
Yep. I like that.
-Andy
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution