> On Jul 19, 2017, at 20:33, Taylor Swift via swift-users
> <swift-users@swift.org> wrote:
>
> Many APIs like OpenGL take arrays where the atomic unit is multiple elements
> long. For example, a buffer of coordinates laid out like
>
> :[Float] = [ x1, y1, z1, x2, y2, z2, ... , xn, yn, zn ]
>
> I want to be able to define in Swift (i.e., without creating and importing a
> Objective C module) a struct that preserves the layout, so that I can do
> withMemoryRebound(to:capacity:_) or something similar and treat the buffer as
>
> struct Point
> {
> let x:Float,
> y:Float,
> z:Float
> }
>
> :[Point] = [ point1, point2, ... , pointn ]
>
> The memory layout of the struct isn’t guaranteed, but will the layout be
> guaranteed to be in declaration order if I use a tuple inside the struct
> instead?
>
> struct Point
> {
> let _point:(x:Float, y:Float, z:Float)
>
> var x:Float
> {
> return self._point.x
> }
>
> var y:Float
> {
> return self._point.y
> }
>
> var z:Float
> {
> return self._point.z
> }
> }
>
> This is an ugly workaround, but I can’t really think of any alternatives that
> don’t involve “import something from Objective C”. I am aware that the
> implementation of structs currently lays them out in declaration order, but
> I’m looking for something that’s actually defined in the language.
IIRC, Swift doesn't have a way to get a guaranteed memory layout yet, other
than defining the type in C (or Obj-C) and importing it.
- Dave Sweeris
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users