<div dir="ltr">Checking alignment good use case, which I did not consider. Not to turn this into a swift-evolution topic, but couldn&#39;t this use case be covered by adding functions to UnsafePointer? I&#39;m thinking something like this.<div><br></div><div>func distanceToBoundary(_ boundary: Int) -&gt; Distance {</div><div>    return Builtin.ptrtoint_Word(self._rawValue) % boundary</div><div>}</div><div><br></div><div>func isAlignedToBoundary(_ boundary: Int) -&gt; Boolean {</div><div>    return distanceToBoundary(boundary) == 0</div><div>}</div><div><br></div><div>I&#39;ll admit I don&#39;t have a lot of experience working with algorithms which check pointer alignment. If you need a check that requires a more complicated equation, then yeah, converting UnsafePointers to Ints is probably the best solution. But if possible, it&#39;s probably best to avoid requiring users to convert to int and back. They not only need to write less code if UnsafePointers can take care of this for them, but it also prevents subtle bugs they may write. (E.g. Converting 2 UnsafePointers to UInts and then subtracting them to find the distance, but subtracting the larger pointer from the smaller one).</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 8, 2015 at 8:45 AM, Stephen Canon <span dir="ltr">&lt;<a href="mailto:scanon@apple.com" target="_blank">scanon@apple.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 style="word-wrap:break-word"><div>When writing high-performance code, it is fairly common to check the alignment of pointers so that initial elements can be processed until some suitable alignment is reached to use a faster implementation, or to verify that a fast algorithm can be used.</div><div><br></div><div><blockquote type="cite"><div><div class="h5"><div>On Dec 8, 2015, at 10:59 AM, Michael Buckley via swift-dev &lt;<a href="mailto:swift-dev@swift.org" target="_blank">swift-dev@swift.org</a>&gt; wrote:</div><br></div></div><div><div><div class="h5"><div dir="ltr">I&#39;m looking for a good starter project, so normally I would be interested in taking this, but I&#39;m not sure I can think of a good motivation for it. UnsafePointer&#39;s advanceBy and distanceTo functions take care of pointer arithmetic more safely than converting to int would, and the debugDescription property can get you the address for debugging purposes.<div><br></div><div>Considering that everything that goes through the swift-evolution process needs to have a motivation, is there a use case for this that I&#39;m not thinking of?</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 7, 2015 at 4:45 PM, Dmitri Gribenko via swift-dev <span dir="ltr">&lt;<a href="mailto:swift-dev@swift.org" target="_blank">swift-dev@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi everyone,<br>
<br>
The standard library has bitPattern initializers on pointers. But we<br>
are missing initializers to create integers from pointers.<br>
<br>
Someone needs to propose these APIs, walk them through<br>
swift-evolution, write a patch for the library and add tests.<br>
<br>
extension UInt {<br>
  init&lt;T&gt;(bitPattern: UnsafePointer&lt;T&gt;) {<br>
    self = UInt(Builtin.ptrtoint_Word(bitPattern._rawValue))<br>
  }<br>
<br>
  init&lt;T&gt;(bitPattern: UnsafeMutablePointer&lt;T&gt;) {<br>
    self = UInt(Builtin.ptrtoint_Word(bitPattern._rawValue))<br>
  }<br>
}<br>
<br>
extension Int {<br>
  init&lt;T&gt;(bitPattern: UnsafePointer&lt;T&gt;) {<br>
    self = Int(Builtin.ptrtoint_Word(bitPattern._rawValue))<br>
  }<br>
<br>
  init&lt;T&gt;(bitPattern: UnsafeMutablePointer&lt;T&gt;) {<br>
    self = Int(Builtin.ptrtoint_Word(bitPattern._rawValue))<br>
  }<br>
}<br>
<br>
<a href="https://bugs.swift.org/browse/SR-131" rel="noreferrer" target="_blank">https://bugs.swift.org/browse/SR-131</a><br>
<span><font color="#888888"><br>
Dmitri<br>
<br>
--<br>
main(i,j){for(i=2;;i++){for(j=2;j&lt;i;j++){if(!(i%j)){j=0;break;}}if<br>
(j){printf(&quot;%d\n&quot;,i);}}} /*Dmitri Gribenko &lt;<a href="mailto:gribozavr@gmail.com" target="_blank">gribozavr@gmail.com</a>&gt;*/<br>
_______________________________________________<br>
swift-dev mailing list<br>
<a href="mailto:swift-dev@swift.org" target="_blank">swift-dev@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-dev" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-dev</a><br>
</font></span></blockquote></div><br></div>
</div></div><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=pngPxwQ4BiP5IDU2rQC6TcjbiXVR4eqjpuzmzac21kjdDjX8OUqNSR5K5Ti12EqnUGGIQy0jQddi-2F5GxvDpfM0hVk04p-2Fk1711hXX-2Bnfjni86We2gg2LhjdGx5j5kLW-2FQ8ZwCSAwJULIVAFKKlDdBBZ6oqaz1bONw9hbWu573yory6wFNBMOBwTtJY6wAjhGO0u4S3RoP23-2FAva-2BkHc78YcKg-2F4LZsyQAkVyLF3cDPs-3D" alt="" width="1" height="1" border="0" style="min-height:1px!important;width:1px!important;border-width:0!important;margin-top:0!important;margin-bottom:0!important;margin-right:0!important;margin-left:0!important;padding-top:0!important;padding-bottom:0!important;padding-right:0!important;padding-left:0!important">
_______________________________________________<span class=""><br>swift-dev mailing list<br><a href="mailto:swift-dev@swift.org" target="_blank">swift-dev@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-dev" target="_blank">https://lists.swift.org/mailman/listinfo/swift-dev</a><br></span></div></blockquote></div><br></div></blockquote></div><br></div>