<div dir="ltr">I thought tuples, like structs do <i>not</i> have fixed layout. And they get padded too.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 10, 2018 at 5:01 PM, Nevin Brackett-Rozinsky <span dir="ltr">&lt;<a href="mailto:nevin.brackettrozinsky@gmail.com" target="_blank">nevin.brackettrozinsky@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Conversely, since I’m pretty sure the memory layout of a *tuple* is guaranteed to be as it appears, I would probably start with something like this:<div><br></div><div>







<p class="m_-7320592812594310316gmail-p1" style="margin:0px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:normal;font-family:Menlo;color:rgb(0,0,0);background-color:rgb(255,255,255)"><span class="m_-7320592812594310316gmail-s1" style="color:rgb(186,45,162)">typealias</span> Vec3rgba = (x: <span class="m_-7320592812594310316gmail-s2" style="color:rgb(112,61,170)">Float</span>, y: <span class="m_-7320592812594310316gmail-s2" style="color:rgb(112,61,170)">Float</span>, z: <span class="m_-7320592812594310316gmail-s2" style="color:rgb(112,61,170)">Float</span>, r: <span class="m_-7320592812594310316gmail-s2" style="color:rgb(112,61,170)">Int8</span>, g: <span class="m_-7320592812594310316gmail-s2" style="color:rgb(112,61,170)">Int8</span>, b: <span class="m_-7320592812594310316gmail-s2" style="color:rgb(112,61,170)">Int8</span>, a: <span class="m_-7320592812594310316gmail-s2" style="color:rgb(112,61,170)">Int8</span>)</p></div><span class="HOEnZb"><font color="#888888"><div><br></div></font></span><div><span class="HOEnZb"><font color="#888888">Nevin</font></span><div><div class="h5"><div><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 10, 2018 at 4:27 PM, Jens Persson via swift-users <span dir="ltr">&lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I&#39;m not sure what you mean by &quot;I need the buffer to be a vector /.../&quot; but perhaps this may be of some help:<div><br></div><div><div>struct S {</div><div>    var x: Float</div><div>    var y: Float</div><div>    var z: Float</div><div>    var r: UInt8</div><div>    var g: UInt8</div><div>    var b: UInt8</div><div>    var a: UInt8</div><div>}</div><div>var buf = S(x: 0.1, y: 1.2, z: 2.3, r: 11, g: 22, b: 33, a: 44)</div><div>print(MemoryLayout&lt;S&gt;.stride) // 16</div><div>withUnsafeMutableBytes(of: &amp;buf) { ptr in</div><div>    print(&quot;x:&quot;, ptr.load(fromByteOffset: 0, as: Float.self)) // 0.1</div><div>    print(&quot;y:&quot;, ptr.load(fromByteOffset: 4, as: Float.self)) // 1.2</div><div>    print(&quot;z:&quot;, ptr.load(fromByteOffset: 8, as: Float.self)) // 2.3</div><div>    print(&quot;r:&quot;, ptr.load(fromByteOffset: 12, as: UInt8.self)) // 11</div><div>    print(&quot;g:&quot;, ptr.load(fromByteOffset: 13, as: UInt8.self)) // 22</div><div>    print(&quot;b:&quot;, ptr.load(fromByteOffset: 14, as: UInt8.self)) // 33</div><div>    print(&quot;a:&quot;, ptr.load(fromByteOffset: 15, as: UInt8.self)) // 44</div><div>}</div></div><div><br></div><div>NOTE however that the memory layout of Swift-structs is not guaranteed to remain like this and is thus not future-proof, although I think that if/when things changes, there will be some way to tell the compiler that you want the memory to be this &quot;expected&quot; &quot;C-like&quot; layout.</div><div><br></div><div>/Jens</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="m_-7320592812594310316gmail-h5">On Wed, Jan 10, 2018 at 10:03 PM, Kelvin Ma via swift-users <span dir="ltr">&lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt;</span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div class="m_-7320592812594310316gmail-h5"><div dir="ltr"><div><div>I want to create a buffer with the layout <br></div><div><br></div><span style="font-family:monospace,monospace">0           4           8           12      13      14      15      16<br>[   x:Float   |</span><span style="font-family:monospace,monospace"><span style="font-family:monospace,monospace">   y:Float   </span>|</span><span style="font-family:monospace,monospace"><span style="font-family:monospace,monospace">   z:Float   </span>| r:UInt8 | g:UInt8 | b:UInt8 | _:UInt8 ]</span><br></div><div><br></div>Normally, I’d use <span style="font-family:monospace,monospace">UnsafeRawBufferPointer</span> for this, but I need the buffer to be a vector (i.e. with <span style="font-family:monospace,monospace">append(_:)</span>), and for it to return a Swift-managed <span style="font-family:monospace,monospace">Array&lt;UInt8&gt;</span>. How should I do this? The project does not use Foundation.<br></div>
<br></div></div>______________________________<wbr>_________________<br>
swift-users mailing list<br>
<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-users</a><br>
<br></blockquote></div><br></div>
<br>______________________________<wbr>_________________<br>
swift-users mailing list<br>
<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-users</a><br>
<br></blockquote></div><br></div></div></div></div></div></div>
</blockquote></div><br></div>