> On Feb 6, 2017, at 10:26 AM, Ted F.A. van Gaalen via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Hi Dave,
> Oops! yes, you’re right!
> I did read again more thoroughly about Unicode 
> and how Unicode is handled within Swift...
> -should have done that before I write something- sorry.  
> 
> Nevertheless: 
> 
> How about this solution:  (if I am not making other omissions in my thinking 
> again) 
> -Store the string as a collection of fixed-width 32 bit UTF-32 characters 
> anyway.
> -however, if the Unicode character is a grapheme cluster (2..n Unicode 
> characters),then 
> store a pointer to a hidden child string containing the actual grapheme 
> cluster, like so:
> 
> 1: [UTF32, UTF32, UTF32, 1pointer,  UTF32, UTF32, 1pointer, UTF32, UTF32]
>                                                 |                             
>              |
> 2:                               [UTF32, UTF32]                  [UTF32, 
> UTF32, UTF32, ...]
> 
> whereby (1) is aString as seen by the programmer.
> and (2)  are hidden child strings, each containing a grapheme cluster. 

The random access would require a uniform layout, so a pointer and scalar would 
need to be the same size. The above would work with a 32 bit platform with a 
tagged pointer, but would require a 64-bit slot for pointers on 64-bit systems 
like macOS and iOS.

Today when I need to do random access into a string, I convert it to an 
Array<Character>. Hardly efficient memory-wise, but efficient enough for random 
access.

-DW
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to