Probably needs an argument label since it's performing an explicit purpose, not 
just a vanilla conversion initializer. So maybe 
UnsafeRawBufferPointer.init(rebasing:)

Or since we have same-type constrained extensions now on master maybe you could 
do it as a property: 

extension RandomAccessSlice where Base == UnsafeRawBufferPointer {
    var rebased: UnsafeRawBufferPointer {
        return UnsafeRawBufferPointer(start: base.baseAddress, count: count)
    }
}

(written by hand without a compiler so unlikely to be correct :)

> On Dec 8, 2016, at 18:07, Andrew Trick <atr...@apple.com> wrote:
> 
> 
>> On Dec 8, 2016, at 5:44 PM, Xiaodi Wu via swift-evolution 
>> <swift-evolution@swift.org> wrote:
>> 
>>> On Thu, Dec 8, 2016 at 6:53 PM, Ben Cohen via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>>> On Dec 8, 2016, at 4:35 PM, Jordan Rose via swift-evolution 
>>>> <swift-evolution@swift.org> wrote:
>>>> 
>>>> Um, Sequence doesn’t have a subscript (or indexes). Sequences are 
>>>> single-pass. So if this is important, it needs to stay a Collection.
>>> 
>>> Just because something fulfills one of the requirements of a Collection 
>>> does not mean it should be one. It needs to tick all the boxes before its 
>>> allowed to be elevated.
>>> 
>>> But it’s still allowed to have subscripts (UnsafePointer has subscripting 
>>> but isn’t a collection) or be multi-pass (strides are multiples but are 
>>> only sequences). That’s OK
>>> 
>>> In this case, yes it’s multi-pass, yes it has a subscript, but no it isn’t 
>>> a collection because it doesn’t meet the requirements for slicing i.e. that 
>>> indices of the slice be indices of the parent.
>>> (relatedly… it appears this requirement is documented on the concrete Slice 
>>> type rather than on Collection… which is a documentation bug we should fix).
>> 
>> If this is indeed a requirement for Collection, then my vote would be for 
>> Nate's option #1 and Andy's option #2, to give UnsafeRawBufferPointer a 
>> Slice type that fulfills the requirement. It's the smallest change, 
>> preserves the use of integer indices, and preserves what Andy stated as the 
>> desired use case of making it easy for users to switch out code written for 
>> [UInt8].
> 
> Ok, but there needs to be an easy way in a nongeneric context to convert from 
> a Slice<URBP> into an URBP (with normalized byte offsets).
> 
> Does anyone object to adding an initializer for this? Any suggestions on 
> naming? Do we need an argument label? etc?
> 
> UnsafeRawBufferPointer(_ : Slice<UnsafeRawBufferPointer>)
> 
> as in:
> 
> let region = UnsafeRawBufferPointer(buffer[i..<j])
> 
> -Andy
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to