@@ -60,7 +60,7 @@ extension std.string {
6060 self . init ( )
6161 return
6262 }
63- self . init ( str)
63+ unsafe self. init ( str)
6464 }
6565}
6666
@@ -403,3 +403,62 @@ extension String {
403403 unsafe withExtendedLifetime ( cxxU32StringView) { }
404404 }
405405}
406+
407+ @available ( SwiftCompatibilitySpan 5 . 0 , * )
408+ extension std . string {
409+ public var span : Span < CChar > {
410+ @_lifetime ( borrow self)
411+ @_alwaysEmitIntoClient
412+ borrowing get {
413+ let buffer = unsafe UnsafeBufferPointer( start: self . __dataUnsafe ( ) , count: Int ( self . size ( ) ) )
414+ let span = unsafe Span( _unsafeElements: buffer)
415+ return unsafe _cxxOverrideLifetime ( span, borrowing: self )
416+ }
417+ }
418+ }
419+
420+ @available ( SwiftStdlib 6 . 2 , * )
421+ extension std . string {
422+ public var utf8Span : UTF8Span ? {
423+ @_lifetime ( borrow self)
424+ @_alwaysEmitIntoClient
425+ borrowing get {
426+ let buffer = unsafe UnsafeBufferPointer( start: self . __dataUnsafe ( ) , count: Int ( self . size ( ) ) )
427+ let rawBuffer = UnsafeRawBufferPointer ( buffer)
428+ let bufferWithFixedType = unsafe rawBuffer. assumingMemoryBound ( to: UInt8 . self)
429+ let span = unsafe Span( _unsafeElements: bufferWithFixedType)
430+ let spanWithFixedLifetime = unsafe _cxxOverrideLifetime ( span, borrowing: self )
431+ return try ? UTF8Span ( validating: spanWithFixedLifetime)
432+ }
433+ }
434+ }
435+
436+ @available ( SwiftCompatibilitySpan 5 . 0 , * )
437+ extension std . u16string {
438+ public var span : Span < UInt16 > {
439+ @_lifetime ( borrow self)
440+ @_alwaysEmitIntoClient
441+ borrowing get {
442+ let buffer = unsafe UnsafeBufferPointer( start: self . __dataUnsafe ( ) , count: Int ( self . size ( ) ) )
443+ let rawBuffer = UnsafeRawBufferPointer ( buffer)
444+ let bufferWithFixedType = unsafe rawBuffer. assumingMemoryBound ( to: UInt16 . self)
445+ let span = unsafe Span( _unsafeElements: bufferWithFixedType)
446+ return unsafe _cxxOverrideLifetime ( span, borrowing: self )
447+ }
448+ }
449+ }
450+
451+ @available ( SwiftCompatibilitySpan 5 . 0 , * )
452+ extension std . u32string {
453+ public var span : Span < UInt32 > {
454+ @_lifetime ( borrow self)
455+ @_alwaysEmitIntoClient
456+ borrowing get {
457+ let buffer = unsafe UnsafeBufferPointer( start: self . __dataUnsafe ( ) , count: Int ( self . size ( ) ) )
458+ let rawBuffer = UnsafeRawBufferPointer ( buffer)
459+ let bufferWithFixedType = unsafe rawBuffer. assumingMemoryBound ( to: UInt32 . self)
460+ let span = unsafe Span( _unsafeElements: bufferWithFixedType)
461+ return unsafe _cxxOverrideLifetime ( span, borrowing: self )
462+ }
463+ }
464+ }
0 commit comments