topic "String and WString"; [2 $$0,0#00000000000000000000000000000000:Default] [i448;a25;kKO9;2 $$1,0#37138531426314131252341829483380:class] [l288;2 $$2,0#27521748481378242620020725143825:desc] [0 $$3,0#96390100711032703541132217272105:end] [H6;0 $$4,0#05600065144404261032431302351956:begin] [i448;a25;kKO9;2 $$5,0#37138531426314131252341829483370:item] [l288;a4;*@5;1 $$6,6#70004532496200323422659154056402:requirement] [l288;i1121;b17;O9;~~~.1408;2 $$7,0#10431211400427159095818037425705:param] [i448;b42;O9;2 $$8,8#61672508125594000341940100500538:tparam] [b42;2 $$9,9#13035079074754324216151401829390:normal] [{_}%EN-US [s0; [*@3;4 String]&] [s1;:String`:`:class:%- [@(0.0.255)3 class][3 _][*3 String][3 _:_][@(0.0.255)3 public][3 _][*@3;3 Mo veable][@(0.0.255)3 <][*3 String][3 , ][_^AString^3 AString][@(0.0.255)3 <][_^String0^3 Strin g0][@(0.0.255)3 >][3 _>_]&] [s0;3%- &] [s0; String is a value class that contains an array of characters (or bytes). It is designed to have fast copy operations. The array of characters is zero terminated. String provides non`-mutable access to the array of characters. String can store 8 bit encoded string or an UTF`-8 encoded string. For UTF`-8 strings, however, String works with raw 8 bit values `- there are not automatic conversions performed e.g. in operator`[`]. If you need to access individual UTF`-8 characters, the best practice in most cases is to convert it to WString (and eventually back after processing).&] [s0; &] [s0; String is also often used to store raw binary data.&] [s0; &] [s0; WString is similar to String, but it uses 16 bit Ucs2 encoding. String and WString share a number of common functions through the AString interface.&] [s3; &] [s0; &] [ {{10000F(128)G(128)@1 [s0; [* Constructor Detail]]}}&] [s3;%- &] [s5;:String`:`:String`(`):%- [* String]()&] [s2; Default constructor. Constructs empty [* String].&] [s3;%- &] [s4;%- &] [s5;:String`:`:String`(const String`&`):%- [* String]([@(0.0.255) const]_[* String][@(0.0.255) `& ]_[*@3 s])&] [s2; Default copy constructor.&] [s3; &] [s4;%- &] [s5;:String`:`:String`(const char`*`):%- [* String]([@(0.0.255) const]_[@(0.0.255) char]_`* [*@3 s])&] [s2; Creates a copy of zero terminated string [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:String`:`:String`(const char`*`,int`):%- [* String]([@(0.0.255) const]_[@(0.0.255) cha r]_`*[*@3 s], [@(0.0.255) int]_[*@3 n])&] [s2; Constructs a string equal to first [%-*@3 n] characters of zero terminated string [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:String`:`:String`(const String`&`,int`):%- [* String]([@(0.0.255) const]_[* String][@(0.0.255) `& ]_[*@3 s], [@(0.0.255) int]_[*@3 n])&] [s2; Constructs a string equal to first [%-*@3 n] characters of String [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:String`:`:String`(const byte`*`,int`):%- [* String]([@(0.0.255) const]_[_^byte^ byte]_ `*[*@3 s], [@(0.0.255) int]_[*@3 n])&] [s2; Constructs a string equal to first [%-*@3 n] bytes of [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:String`:`:String`(const char`*`,const char`*`):%- [* String]([@(0.0.255) const]_[@(0.0.255) c har]_`*[*@3 s], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 lim])&] [s2; Constructs a string equal to first [%-*@3 lim] `- [%-*@3 s] characters of [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:String`:`:String`(int`,int`):%- [* String]([@(0.0.255) int]_[*@3 chr], [@(0.0.255) int]_[*@3 count])&] [s2; Constructs a string consisting of [%-*@3 count] characters equal to [%-*@3 chr].&] [s3; &] [s4;%- &] [s5;:String`:`:String`(StringBuffer`&`):%- [* String]([_^StringBuffer^ StringBuffer][@(0.0.255) `& ]_[*@3 b])&] [s2; Constructs a string from [%-*@3 b]. [%-*@3 b] is emptied by this operation.&] [s3; &] [s4;%- &] [s5;:String`:`:String`(const Nuller`&`):%- [* String]([@(0.0.255) const]_[_^Nuller^ Nuller][@(0.0.255) `& ])&] [s2; Constructs empty [* String]. This variant is important to allow assigning [* Null ]to [* String ](which is same as assigning the empty [* String]).&] [s3;%- &] [s4;%- &] [s5;:String`:`:String`(const string`&`):%- [* String]([@(0.0.255) const]_std`::string[@(0.0.255) `& ]_[*@3 s])&] [s2; Constructor to achieve minimal STL compatibility.&] [s3; &] [s0; &] [ {{10000F(128)G(128)@1 [s0; [* Public Member List]]}}&] [s3;%- &] [s5;:String`:`:Shrink`(`):%- [@(0.0.255) void]_[* Shrink]()&] [s2; Reduces memory used by string to minimum (size optimization).&] [s3; &] [s4;%- &] [s5;:String`:`:ToWString`(`)const:%- [_^WString^ WString]_[* ToWString]()_[@(0.0.255) const ]&] [s2; Convert String to WString using current default character set.&] [s3;%- &] [s4;%- &] [s5;:String`:`:ToString`(`)const:%- [@(0.0.255) const]_[_^String^ String][@(0.0.255) `&]_[* T oString]()_[@(0.0.255) const]&] [s2; Returns `*this. Useful because ToString is standard method to convert concrete type to text, used by AsString template (and therefore by operator << as well).&] [s3;%- &] [s4;%- &] [s5;:String`:`:GetVoid`(`):%- [@(0.0.255) static] [_^String^ String]_[* GetVoid]()&] [s2; Returns special Void value. This value is same as empty string, but IsVoid method returns true for it. It can be used in special scenarios where client code needs to distinguish between two empty values (let us say Void is `"more empty`"...). For example, LoadFile returns Void string if file failed to load, but normal empty string if it is empty.&] [s3;%- &] [s4;%- &] [s5;:String`:`:IsVoid`(`)const:%- [@(0.0.255) bool]_[* IsVoid]()_[@(0.0.255) const]&] [s2; Returns true if String is special value returned by [* GetVoid].&] [s3;%- &] [s4;%- &] [s5;:String0`:`:IsEqual`(const String0`&`)const:%- [@(0.0.255) bool]_[* IsEqual]([@(0.0.255) c onst]_[_^String0^ String][@(0.0.255) `&]_[*@3 s])_[@(0.0.255) const]&] [s2; Return true if string is equal to [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:String0`:`:Compare`(const String0`&`)const:%- [@(0.0.255) int]_[* Compare]([@(0.0.255) c onst]_[_^String0^ String0][@(0.0.255) `&]_[*@3 s])_[@(0.0.255) const]&] [s2; Lexicographic comparison, return `-1 if this string is lower, 0 for equality, 1 if this string is greater. Individual characters are compared as unsigned integer values.&] [s3; &] [s4;%- &] [s5;:String0`:`:GetHashValue`(`)const:%- [@(0.0.255) unsigned]_[* GetHashValue]()_[@(0.0.255) c onst]&] [s2; Returns the hash value of the string.&] [s3;%- &] [s4;%- &] [s5;:String0`:`:Cat`(int`):%- [@(0.0.255) void]_[* Cat]([@(0.0.255) int]_[*@3 c])&] [s5;:String`:`:operator`+`=`(char`):%- [@(0.0.255) const]_[_^String^ String][@(0.0.255) `&]_ [* operator`+`=]([@(0.0.255) char]_[*@3 c])&] [s2; Appends single character [%-*@3 c]. This operations has constant amortized time (in other words, internal space used by implementation grows exponentially, like with Vector or std`::vector).&] [s3; &] [s4;%- &] [s5;:String0`:`:Cat`(const char`*`,int`):%- [@(0.0.255) void]_[* Cat]([@(0.0.255) const]_[@(0.0.255) c har]_`*[*@3 s], [@(0.0.255) int]_[*@3 len])&] [s2;%- [%% Appends ][*@3 len][%% characters from string ][*@3 s] ([*@3 s ]can contain zero characters).&] [s3; &] [s4;%- &] [s5;:String0`:`:Set`(int`,int`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) int]_[*@3 i], [@(0.0.255) int]_[*@3 chr])&] [s2; Replace character at position [%-*@3 i] with [%-*@3 chr].&] [s3; &] [s4;%- &] [s5;:String0`:`:Trim`(int`):%- [@(0.0.255) void]_[* Trim]([@(0.0.255) int]_[*@3 pos])&] [s2; Sets the number of characters (length) to [%-*@3 pos].&] [s3; &] [s4;%- &] [s5;:String0`:`:Begin`(`)const:%- [@(0.0.255) const]_[@(0.0.255) char]_`*[* Begin]()_[@(0.0.255) c onst]&] [s2; Returns a pointer to the first character.&] [s3;%- &] [s4;%- &] [s5;:String0`:`:End`(`)const:%- [@(0.0.255) const]_[@(0.0.255) char]_`*[* End]()_[@(0.0.255) c onst]&] [s2; Returns a pointer to ending zero.&] [s3;%- &] [s4;%- &] [s5;:String0`:`:Remove`(int`,int`):%- [@(0.0.255) void]_[* Remove]([@(0.0.255) int]_[*@3 pos], [@(0.0.255) int]_[*@3 count]_`=_[@3 1])&] [s2; Removes [%-*@3 count] element starting at position [%-*@3 pos].&] [s3; &] [s4;%- &] [s5;:String0`:`:Clear`(`):%- [@(0.0.255) void]_[* Clear]()&] [s2; Empties the string.&] [s3;%- &] [s4;%- &] [s5;:String0`:`:GetCount`(`)const:%- [@(0.0.255) int]_[* GetCount]()_[@(0.0.255) const]&] [s5;:String0`:`:GetLength`(`)const:%- [@(0.0.255) int]_[* GetLength]()_[@(0.0.255) const]&] [s2; Returns the number of characters.&] [s3;%- &] [s4;%- &] [s5;:String0`:`:GetAlloc`(`)const:%- [@(0.0.255) int]_[* GetAlloc]()_[@(0.0.255) const]&] [s2; Returns the number of allocated characters (maximum string length before it has to grow) &] [s3;%- &] [s4;%- &] [s5;:String0`:`:Reserve`(int`):%- [@(0.0.255) void]_[* Reserve]([@(0.0.255) int]_[*@3 r])&] [s2; Reserves [%-*@3 r] characters of internal storage for future concatenation operations.&] [s3; &] [s4;%- &] [s5;:String`:`:operator`+`=`(const char`*`):%- [@(0.0.255) const]_[_^String^ String][@(0.0.255) `& ]_[* operator`+`=]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 s])&] [s5;:String`:`:operator`+`=`(const String`&`):%- [@(0.0.255) const]_[_^String^ String][@(0.0.255) `& ]_[* operator`+`=]([@(0.0.255) const]_[_^String^ String][@(0.0.255) `&]_[*@3 s])&] [s2; Appends a zero terminated string [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:String`:`:operator`=`(const String`&`):%- [_^String^ String][@(0.0.255) `&]_[* operato r`=]([@(0.0.255) const]_[_^String^ String][@(0.0.255) `&]_[*@3 s])&] [s2; Assigns another string [%-*@3 s]. This operations is relatively fast and does not depend on the length of string.&] [s3; &] [s4;%- &] [s5;:String`:`:operator`=`(const char`*`):%- [_^String^ String][@(0.0.255) `&]_[* operator`= ]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 s])&] [s2; Assign a zero terminated string [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:String`:`:operator`=`(StringBuffer`&`):%- [_^String^ String][@(0.0.255) `&]_[* operato r`=]([_^StringBuffer^ StringBuffer][@(0.0.255) `&]_[*@3 b])&] [s2; Assigns the content of [* StringBuffer]. After the operation,b is emptied.&] [s3; &] [s4;%- &] [s5;:String`:`:operator`<`<`=`(const String`&`):%- [_^String^ String][@(0.0.255) `&]_[* ope rator<<`=]([@(0.0.255) const]_[_^String^ String][@(0.0.255) `&]_[*@3 s])&] [s2; `"Deep`" assignment. It is equivalent of standard assignment followed by [* Shrink ]operation (in other words, internal buffer gets reallocated to the exact size of source).&] [s3; &] [s4;%- &] [s5;:String`:`:operator std`:`:string`(`)const:%- [* operator_std`::string]()_[@(0.0.255) c onst]&] [s2; Conversion for minimal STL compatibility.&] [s3;%- &] [s4;%- &] [s5;:String0`:`:operator const char`*`(`)const:%- [@(0.0.255) operator]_[@(0.0.255) const ]_[@(0.0.255) char]_`*()_[@(0.0.255) const]&] [s5;:String0`:`:operator`~`(`)const:%- [@(0.0.255) const]_[@(0.0.255) char]_`*[* operator`~ ]()_[@(0.0.255) const]&] [s2; Returns [* Begin]().&] [s3;%- &] [s4;%- &] [s5;:String0`:`:operator`[`]`(int`)const:%- [@(0.0.255) int]_[* operator`[`]]([@(0.0.255) i nt]_[*@3 i])_[@(0.0.255) const]&] [s2;%- [%% Returns the character at position ][*@3 i.]&] [s3;%- &] [s0;%- &] [s0;%- &] [s0;%- &] [s0;%- &] [s0;@(0.0.255) &] [s0;@(0.0.255) &] [s0; [*@3;4 WString]&] [s1;:WString`:`:class:%- [@(0.0.255)3 class][3 _][*3 WString][3 _:_][@(0.0.255)3 public][3 _][*@3;3 M oveable][@(0.0.255)3 <][*3 WString][3 , ][_^AString^3 AString][@(0.0.255)3 <][_^WString0^3 WS tring0][@(0.0.255)3 >][3 _>_]&] [s3; &] [s0; &] [ {{10000F(128)G(128)@1 [s0; [* Constructor Detail]]}}&] [s3; &] [s5;:WString`:`:WString`(`):%- [* WString]()&] [s2; Default constructor. Constructs empty [* WString].&] [s3;%- &] [s4;%- &] [s5;:WString`:`:WString`(const WString`&`):%- [* WString]([@(0.0.255) const]_[* WString][@(0.0.255) `& ]_[*@3 s])&] [s2; Default copy constructor.&] [s3; &] [s4;%- &] [s5;:WString`:`:WString`(const wchar`*`):%- [* WString]([@(0.0.255) const]_[_^wchar^ wchar]_ `*[*@3 s])&] [s2; Creates a copy of zero terminated string [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:WString`:`:WString`(const char`*`):%- [* WString]([@(0.0.255) const]_[@(0.0.255) char]_ `*[*@3 s])&] [s2; Creates a copy of zero terminated string [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:WString`:`:WString`(const WString`&`,int`):%- [* WString]([@(0.0.255) const]_[* WStrin g][@(0.0.255) `&]_[*@3 s], [@(0.0.255) int]_[*@3 n])&] [s2; Constructs a string equal to first [%-*@3 n] characters of [* WString] [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:WString`:`:WString`(const wchar`*`,int`):%- [* WString]([@(0.0.255) const]_[_^wchar^ w char]_`*[*@3 s], [@(0.0.255) int]_[*@3 n])&] [s2; Constructs a string equal to first [%-*@3 n] characters of zero terminated string [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:WString`:`:WString`(const wchar`*`,const wchar`*`):%- [* WString]([@(0.0.255) const]_ [_^wchar^ wchar]_`*[*@3 s], [@(0.0.255) const]_[_^wchar^ wchar]_`*[*@3 lim])&] [s2; Constructs a string equal to first [%-*@3 lim] `- [%-*@3 s] characters of [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:WString`:`:WString`(const char`*`,int`):%- [* WString]([@(0.0.255) const]_[@(0.0.255) c har]_`*[*@3 s], [@(0.0.255) int]_[*@3 n])&] [s2; Constructs a string equal to first [%-*@3 n] characters of zero terminated string [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:WString`:`:WString`(const char`*`,const char`*`):%- [* WString]([@(0.0.255) const]_[@(0.0.255) c har]_`*[*@3 s], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 lim])&] [s2; Constructs a string equal to first [%-*@3 n] characters of zero terminated string [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:WString`:`:WString`(int`,int`):%- [* WString]([@(0.0.255) int]_[*@3 chr], [@(0.0.255) int]_[*@3 count])&] [s2; Constructs a string consisting of [%-*@3 count] characters equal to [%-*@3 chr].&] [s3; &] [s4;%- &] [s5;:WString`:`:WString`(WStringBuffer`&`):%- [* WString]([_^WStringBuffer^ WStringBuffer ][@(0.0.255) `&]_[*@3 b])&] [s2; Constructs a string from [%-*@3 b]. [%-*@3 b] is emptied by this operation.&] [s3; &] [s4;%- &] [s5;:WString`:`:WString`(const Nuller`&`):%- [* WString]([@(0.0.255) const]_[_^Nuller^ Null er][@(0.0.255) `&])&] [s2; Constructs empty [* WString]. This variant is important to allow assigning [* Null] to [* WString] (which is same as assigning the empty [* WString]).&] [s3;%- &] [s4;%- &] [s5;:WString`:`:WString`(const wstring`&`):%- [* WString]([@(0.0.255) const]_std`::wstring [@(0.0.255) `&]_[*@3 s])&] [s2; Constructor to achieve minimal STL compatibility.&] [s3; &] [s0; &] [ {{10000F(128)G(128)@1 [s0; [* Public Member List]]}}&] [s3; &] [s5;:WString`:`:Shrink`(`):%- [@(0.0.255) void]_[* Shrink]()&] [s2; Reduces memory used by string to minimum (size optimization).&] [s3;%- &] [s4;%- &] [s5;:WString`:`:ToString`(`)const:%- [_^String^ String]_[* ToString]()_[@(0.0.255) const]&] [s2; Converts [* WString ]to [* String ]using current default character set. Also serves as standard text conversion (for [* AsString] and [* operator<<] templates).&] [s3;%- &] [s4;%- &] [s5;:WString`:`:GetVoid`(`):%- [@(0.0.255) static] [_^WString^ WString]_[* GetVoid]()&] [s2; Returns special Void value. This value is same as empty string, but IsVoid method returns true for it. It can be used in special scenarios where client code needs to distinguish between two empty values (let us say Void is `"more empty`"...). For example, LoadFile returns Void string if file failed to load, but normal empty string if it is empty.&] [s3;%- &] [s4;%- &] [s5;:WString`:`:IsVoid`(`)const:%- [@(0.0.255) bool]_[* IsVoid]()_[@(0.0.255) const]&] [s2; Returns true if String is special value returned by [* GetVoid].&] [s3;%- &] [s4;%- &] [s5;:WString0`:`:Begin`(`)const:%- [@(0.0.255) const]_[_^wchar^ wchar]_`*[* Begin]()_[@(0.0.255) c onst]&] [s2; Returns a pointer to the first character.&] [s3;%- &] [s4;%- &] [s5;:WString0`:`:End`(`)const:%- [@(0.0.255) const]_[_^wchar^ wchar]_`*[* End]()_[@(0.0.255) c onst]&] [s2; Returns a pointer to ending zero.&] [s3;%- &] [s4;%- &] [s5;:WString0`:`:GetCount`(`)const:%- [@(0.0.255) int]_[* GetCount]()_[@(0.0.255) const]&] [s5;:WString0`:`:GetLength`(`)const:%- [@(0.0.255) int]_[* GetLength]()_[@(0.0.255) const]&] [s2; Returns the number of characters.&] [s3;%- &] [s4;%- &] [s5;:WString0`:`:GetAlloc`(`)const:%- [@(0.0.255) int]_[* GetAlloc]()_[@(0.0.255) const]&] [s2; Returns the number of allocated characters (maximum string length before it has to grow) &] [s3;%- &] [s4;%- &] [s5;:WString0`:`:Cat`(int`):%- [@(0.0.255) void]_[* Cat]([@(0.0.255) int]_[*@3 c])&] [s2; Appends single character [%-*@3 c]. This operations has constant amortized time (in other words, internal space used by implementation grows exponentially, like with Vector or std`::vector).&] [s3; &] [s4;%- &] [s5;:WString0`:`:Cat`(const wchar`*`,int`):%- [@(0.0.255) void]_[* Cat]([@(0.0.255) const]_ [_^wchar^ wchar]_`*[*@3 s], [@(0.0.255) int]_[*@3 length])&] [s2;%- [%% Appends ][*@3 len][%% characters from string ][*@3 s] ([*@3 s ]can contain zero characters).&] [s3; &] [s4;%- &] [s5;:WString0`:`:GetHashValue`(`)const:%- [@(0.0.255) unsigned]_[* GetHashValue]()_[@(0.0.255) c onst]&] [s2; Returns the hash value of the string.&] [s3;%- &] [s4;%- &] [s5;:WString0`:`:IsEqual`(const WString0`&`)const:%- [@(0.0.255) bool]_[* IsEqual]([@(0.0.255) c onst]_[_^WString0^ WString][@(0.0.255) `&]_[*@3 s])_[@(0.0.255) const]&] [s2; Return true if string is equal to [%-*@3 s].&] [s3; &] [s4;%- &] [s5;:WString0`:`:Compare`(const WString0`&`)const:%- [@(0.0.255) int]_[* Compare]([@(0.0.255) c onst]_[_^WString0^ WString][@(0.0.255) `&]_[*@3 s])_[@(0.0.255) const]&] [s2; Lexicographic comparison, return `-1 if this string is lower, 0 for equality, 1 if this string is greater. Individual characters are compared as unsigned integer values.&] [s3; &] [s4;%- &] [s5;:WString0`:`:Remove`(int`,int`):%- [@(0.0.255) void]_[* Remove]([@(0.0.255) int]_[*@3 pos ], [@(0.0.255) int]_[*@3 count]_`=_[@3 1])&] [s2; Removes [%-*@3 count] element starting at position [%-*@3 pos].&] [s3; &] [s4;%- &] [s5;:WString0`:`:Insert`(int`,const wchar`*`,int`):%- [@(0.0.255) void]_[* Insert]([@(0.0.255) i nt]_[*@3 pos], [@(0.0.255) const]_[_^wchar^ wchar]_`*[*@3 s], [@(0.0.255) int]_[*@3 count])&] [s2; Inserts first [%-*@3 count] characters of [%-*@3 s] at position [%-*@3 pos].&] [s3; &] [s4;%- &] [s5;:WString0`:`:Clear`(`):%- [@(0.0.255) void]_[* Clear]()&] [s2; Empties the string.&] [s3;%- &] [s4;%- &] [s5;:WString0`:`:Set`(int`,int`):%- [@(0.0.255) void]_[* Set]([@(0.0.255) int]_[*@3 pos], [@(0.0.255) int]_[*@3 ch])&] [s2; Replace character at position [%-*@3 pos] with [%-*@3 ch].&] [s3; &] [s4;%- &] [s5;:WString0`:`:Trim`(int`):%- [@(0.0.255) void]_[* Trim]([@(0.0.255) int]_[*@3 pos])&] [s2; Sets the number of characters (length) to [%-*@3 pos].&] [s3; &] [s0;%- &] [s0;%- &] [s0;%- &] [s0;%- &] [s0;%- &] [s0; &] [s0; [@3;4 AString]&] [s1;:noref:%- [@(0.0.255)3 template][3 _<][@(0.0.255)3 class][3 _][*@3;3 B][@(0.0.255)3 >]&] [s1;:AString`:`:class:%- [@(0.0.255) class]_[* AString]_:_[@(0.0.255) public]_[*@3 B]&] [s9; A class that implements behavior common to both String and WString.&] [s3; &] [s0; &] [s0; ]