Skip to content

Commit 85b53bb

Browse files
committed
[stdlib] add bytes property to Span
1 parent 13cdfaa commit 85b53bb

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

stdlib/public/core/Span/RawSpan.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -309,14 +309,16 @@ extension RawSpan {
309309
/// - span: An existing `Span<T>`, which will define both this
310310
/// `RawSpan`'s lifetime and the memory it represents.
311311
@_alwaysEmitIntoClient
312-
@lifetime(borrow span)
312+
@lifetime(span)
313313
public init<Element: BitwiseCopyable>(
314-
_elements span: borrowing Span<Element>
314+
_elements span: Span<Element>
315315
) {
316-
unsafe self.init(
317-
_unchecked: span._pointer,
316+
let pointer = span._pointer
317+
let rawSpan = unsafe RawSpan(
318+
_unchecked: pointer,
318319
byteCount: span.count &* MemoryLayout<Element>.stride
319320
)
321+
self = unsafe _overrideLifetime(rawSpan, copying: span)
320322
}
321323
}
322324

stdlib/public/core/Span/Span.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,19 @@ extension Span where Element: BitwiseCopyable {
493493
}
494494
}
495495

496+
@available(SwiftStdlib 6.2, *)
497+
extension Span where Element: BitwiseCopyable {
498+
499+
public var bytes: RawSpan {
500+
@lifetime(self)
501+
@_alwaysEmitIntoClient
502+
get {
503+
let rawSpan = RawSpan(_elements: self)
504+
return _overrideLifetime(rawSpan, copying: self)
505+
}
506+
}
507+
}
508+
496509
// MARK: sub-spans
497510
@available(SwiftStdlib 6.2, *)
498511
extension Span where Element: ~Copyable {

0 commit comments

Comments
 (0)