@@ -60,7 +60,7 @@ extension std.string {
60
60
self . init ( )
61
61
return
62
62
}
63
- self . init ( str)
63
+ unsafe self. init ( str)
64
64
}
65
65
}
66
66
@@ -403,3 +403,62 @@ extension String {
403
403
unsafe withExtendedLifetime ( cxxU32StringView) { }
404
404
}
405
405
}
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