Skip to content

Commit 77431f5

Browse files
committed
[stdlib] add MutableSpan.mutableBytes
1 parent a6d311e commit 77431f5

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

stdlib/public/core/Span/MutableRawSpan.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,16 +102,16 @@ extension MutableRawSpan {
102102
}
103103

104104
@_alwaysEmitIntoClient
105-
@lifetime(copy elements)
105+
@lifetime(borrow elements)
106106
public init<Element: BitwiseCopyable>(
107-
_elements elements: consuming MutableSpan<Element>
107+
_elements elements: inout MutableSpan<Element>
108108
) {
109-
let bytes = unsafe UnsafeMutableRawBufferPointer(
110-
start: elements._pointer,
111-
count: elements.count &* MemoryLayout<Element>.stride
109+
let (start, count) = unsafe (elements._pointer, elements._count)
110+
let span = unsafe MutableRawSpan(
111+
_unchecked: start,
112+
byteCount: count &* MemoryLayout<Element>.stride
112113
)
113-
let span = unsafe MutableRawSpan(_unsafeBytes: bytes)
114-
self = unsafe _overrideLifetime(span, copying: elements)
114+
self = unsafe _overrideLifetime(span, mutating: &elements)
115115
}
116116
}
117117

stdlib/public/core/Span/MutableSpan.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,17 @@ extension MutableSpan where Element: BitwiseCopyable {
241241
RawSpan(_mutableSpan: self)
242242
}
243243
}
244+
245+
/// Construct a MutableRawSpan over the memory represented by this span
246+
///
247+
/// - Returns: a MutableRawSpan over the memory represented by this span
248+
@_alwaysEmitIntoClient
249+
public var mutableBytes: MutableRawSpan {
250+
@lifetime(borrow self)
251+
mutating get {
252+
MutableRawSpan(_elements: &self)
253+
}
254+
}
244255
}
245256

246257
@available(SwiftStdlib 6.2, *)

0 commit comments

Comments
 (0)