Index: libcfa/src/collections/string.cfa
===================================================================
--- libcfa/src/collections/string.cfa	(revision fbe3f03e6d4108c04b7ad01b9544077826dea88c)
+++ libcfa/src/collections/string.cfa	(revision 4dab7e8ffa69d52964660a976601bcdb615d006e)
@@ -10,6 +10,6 @@
 // Created On       : Fri Sep 03 11:00:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Apr 15 21:56:28 2024
-// Update Count     : 260
+// Last Modified On : Mon Aug  5 23:12:05 2024
+// Update Count     : 273
 //
 
@@ -45,5 +45,5 @@
 }
 
-void ?{}( string & s, const string & s2, size_t maxlen) {
+void ?{}( string & s, const string & s2, size_t maxlen ) {
     (s.inner) { malloc() };
     ?{}( *s.inner, *s2.inner, COPY_VALUE, maxlen );
@@ -65,5 +65,5 @@
 }
 
-void ?{}( string & s, const char * c, size_t size) {
+void ?{}( string & s, const char * c, size_t size ) {
     (s.inner) { malloc() };
     ?{}( *s.inner, c, size );
@@ -98,4 +98,34 @@
     (s.inner) { malloc() };
     ?{}( *s.inner, rhs );
+}
+
+string str( ssize_t rhs ) {
+	string s = rhs;
+	return s;
+}
+
+string str( size_t rhs ) {
+	string s = rhs;
+	return s;
+}
+
+string str( double rhs ) {
+	string s = rhs;
+	return s;
+}
+
+string str( long double rhs ) {
+	string s = rhs;
+	return s;
+}
+
+string str( double _Complex rhs ) {
+	string s = rhs;
+	return s;
+}
+
+string str( long double _Complex rhs ) {
+	string s = rhs;
+	return s;
 }
 
@@ -115,5 +145,5 @@
 
 void ?{}( string & s, string_WithSharedEdits src ) {
-    ?{}( s, *src.s->inner, 0, src.s->inner->Handle.lnth);
+    ?{}( s, *src.s->inner, 0, src.s->inner->Handle.lnth );
 }
 
@@ -121,10 +151,10 @@
 // Assignment
 
-string & ?=?(string & s, const string & c) {
+string & ?=?( string & s, const string & c ) {
     (*s.inner) = (*c.inner);
     return s;
 }
 
-string & ?=?(string & s, string & c) {
+string & ?=?( string & s, string & c ) {
     (*s.inner) = (*c.inner);
     return s;
@@ -141,11 +171,11 @@
 }
 
-string & assign(string & s, const string & c, size_t n) {
-    assign(*s.inner, *c.inner, n);
-    return s;
-}
-
-string & assign(string & s, const char * c, size_t n) {
-    assign(*s.inner, c, n);
+string & assign( string & s, const string & c, size_t n ) {
+    assign( *s.inner, *c.inner, n );
+    return s;
+}
+
+string & assign( string & s, const char * c, size_t n ) {
+    assign( *s.inner, c, n );
     return s;
 }
@@ -205,5 +235,5 @@
 }
 
-ifstream & ?|?(ifstream & in, string & s) {
+ifstream & ?|?( ifstream & in, string & s ) {
     return in | (*s.inner); // read to internal string_res
 }
@@ -236,27 +266,27 @@
 // Comparison
 
-int  strcmp(const string & s1, const string & s2) { return strcmp(*s1.inner, *s2.inner); }
-bool ?==?(const string & s1, const string & s2) { return *s1.inner == *s2.inner; }
-bool ?!=?(const string & s1, const string & s2) { return *s1.inner != *s2.inner; }
-bool ?>? (const string & s1, const string & s2) { return *s1.inner >  *s2.inner; }
-bool ?>=?(const string & s1, const string & s2) { return *s1.inner >= *s2.inner; }
-bool ?<=?(const string & s1, const string & s2) { return *s1.inner <= *s2.inner; }
-bool ?<? (const string & s1, const string & s2) { return *s1.inner <  *s2.inner; }
-
-int  strcmp(const string & s1, const char * s2) { return strcmp(*s1.inner, s2 ); }
-bool ?==?(const string & s1, const char * s2) { return *s1.inner == s2; }
-bool ?!=?(const string & s1, const char * s2) { return *s1.inner != s2; }
-bool ?>? (const string & s1, const char * s2) { return *s1.inner >  s2; }
-bool ?>=?(const string & s1, const char * s2) { return *s1.inner >= s2; }
-bool ?<=?(const string & s1, const char * s2) { return *s1.inner <= s2; }
-bool ?<? (const string & s1, const char * s2) { return *s1.inner <  s2; }
-
-int  strcmp(const char * s1, const string & s2) { return strcmp( s1, *s2.inner); }
-bool ?==?(const char * s1, const string & s2) { return s1 == *s2.inner; }
-bool ?!=?(const char * s1, const string & s2) { return s1 != *s2.inner; }
-bool ?>? (const char * s1, const string & s2) { return s1 >  *s2.inner; }
-bool ?>=?(const char * s1, const string & s2) { return s1 >= *s2.inner; }
-bool ?<=?(const char * s1, const string & s2) { return s1 <= *s2.inner; }
-bool ?<? (const char * s1, const string & s2) { return s1 <  *s2.inner; }
+int strcmp( const string & s1, const string & s2 ) { return strcmp( *s1.inner, *s2.inner ); }
+bool ?==?( const string & s1, const string & s2 ) { return *s1.inner == *s2.inner; }
+bool ?!=?( const string & s1, const string & s2 ) { return *s1.inner != *s2.inner; }
+bool ?>? ( const string & s1, const string & s2 ) { return *s1.inner >  *s2.inner; }
+bool ?>=?( const string & s1, const string & s2 ) { return *s1.inner >= *s2.inner; }
+bool ?<=?( const string & s1, const string & s2 ) { return *s1.inner <= *s2.inner; }
+bool ?<? ( const string & s1, const string & s2 ) { return *s1.inner <  *s2.inner; }
+
+int strcmp( const string & s1, const char * s2 ) { return strcmp( *s1.inner, s2 ); }
+bool ?==?( const string & s1, const char * s2 ) { return *s1.inner == s2; }
+bool ?!=?( const string & s1, const char * s2 ) { return *s1.inner != s2; }
+bool ?>? ( const string & s1, const char * s2 ) { return *s1.inner >  s2; }
+bool ?>=?( const string & s1, const char * s2 ) { return *s1.inner >= s2; }
+bool ?<=?( const string & s1, const char * s2 ) { return *s1.inner <= s2; }
+bool ?<? ( const string & s1, const char * s2 ) { return *s1.inner <  s2; }
+
+int strcmp( const char * s1, const string & s2 ) { return strcmp( s1, *s2.inner ); }
+bool ?==?( const char * s1, const string & s2 ) { return s1 == *s2.inner; }
+bool ?!=?( const char * s1, const string & s2 ) { return s1 != *s2.inner; }
+bool ?>? ( const char * s1, const string & s2 ) { return s1 >  *s2.inner; }
+bool ?>=?( const char * s1, const string & s2 ) { return s1 >= *s2.inner; }
+bool ?<=?( const char * s1, const string & s2 ) { return s1 <= *s2.inner; }
+bool ?<? ( const char * s1, const string & s2 ) { return s1 <  *s2.inner; }
 
 
@@ -264,5 +294,5 @@
 // Getter
 
-size_t size(const string & s) {
+size_t size( const string & s ) {
     return size( *s.inner );
 }
@@ -271,25 +301,25 @@
 // Concatenation
 
-void ?+=?(string & s, char c) {
+void ?+=?( string & s, char c ) {
     (*s.inner) += c;
 }
 
-void ?+=?(string & s, const string & s2) {
+void ?+=?( string & s, const string & s2 ) {
     (*s.inner) += (*s2.inner);
 }
 
-void append(string & s, const string & s2, size_t maxlen) {
+void append( string & s, const string & s2, size_t maxlen ) {
     append( (*s.inner), (*s2.inner), maxlen );
 }
 
-void ?+=?(string & s, const char * c) {
+void ?+=?( string & s, const char * c ) {
     (*s.inner) += c;
 }
 
-void append(string & s, const char * buffer, size_t bsize) {
+void append( string & s, const char * buffer, size_t bsize ) {
     append( (*s.inner), buffer, bsize );
 }
 
-string ?+?(const string & s, char c) {
+string ?+?( const string & s, char c ) {
     string ret = s;
     ret += c;
@@ -297,5 +327,11 @@
 }
 
-string ?+?(const string & s, const string & s2) {
+string ?+?( char c, const string & s ) {
+    string ret = s;
+    ret += c;
+    return ret;
+}
+
+string ?+?( const string & s, const string & s2 ) {
     string ret = s;
     ret += s2;
@@ -303,5 +339,17 @@
 }
 
-string ?+?(const char * s1, const char * s2) {
+string ?+?( const char * s,  char c ) {
+    string ret = s;
+    ret += c;
+    return ret;
+}
+
+string ?+?( char c, const char * s ) {
+    string ret = c;
+    ret += s;
+    return ret;
+}
+
+string ?+?( const char * s1, const char * s2 ) {
     string ret = s1;
     ret += s2;
@@ -309,5 +357,11 @@
 }
 
-string ?+?(const string & s, const char * c) {
+string ?+?( const char * s1, string & s2 ) {
+    string ret = s1;
+    ret += s2;
+    return ret;
+}
+
+string ?+?( const string & s, const char * c ) {
     string ret = s;
     ret += c;
@@ -318,9 +372,9 @@
 // Repetition
 
-void ?*=?(string & s, size_t factor) {
+void ?*=?( string & s, size_t factor ) {
     (*s.inner) *= factor;
 }
 
-string ?*?(const string & s, size_t factor) {
+string ?*?( const string & s, size_t factor ) {
     string ret = s;
     ret *= factor;
@@ -328,5 +382,5 @@
 }
 
-string ?*?(char c, size_t factor) {
+string ?*?( char c, size_t factor ) {
     string ret = c;
     ret *= factor;
@@ -334,5 +388,5 @@
 }
 
-string ?*?(const char * s, size_t factor) {
+string ?*?( const char * s, size_t factor ) {
     string ret = s;
     ret *= factor;
@@ -343,9 +397,9 @@
 // Character access
 
-char ?[?](const string & s, size_t index) {
+char ?[?]( const string & s, size_t index ) {
     return (*s.inner)[index];
 }
 
-string ?[?](string & s, size_t index) {
+string ?[?]( string & s, size_t index ) {
     string ret = { *s.inner, index, 1 };
     return ret`shareEdits;
@@ -355,73 +409,73 @@
 // Search
 
-bool contains(const string & s, char ch) {
+bool contains( const string & s, char ch ) {
     return contains( *s.inner, ch );
 }
 
-int find(const string & s, char search) {
+int find( const string & s, char search ) {
     return find( *s.inner, search );
 }
 
-int find(const string & s, const string & search) {
+int find( const string & s, const string & search ) {
     return find( *s.inner, *search.inner );
 }
 
-int find(const string & s, const char * search) {
-    return find( *s.inner, search);
-}
-
-int find(const string & s, const char * search, size_t searchsize) {
-    return find( *s.inner, search, searchsize);
-}
-
-int findFrom(const string & s, size_t fromPos, char search) {
+int find( const string & s, const char * search ) {
+    return find( *s.inner, search );
+}
+
+int find( const string & s, const char * search, size_t searchsize ) {
+    return find( *s.inner, search, searchsize );
+}
+
+int findFrom( const string & s, size_t fromPos, char search ) {
     return findFrom( *s.inner, fromPos, search );
 }
 
-int findFrom(const string & s, size_t fromPos, const string & search) {
+int findFrom( const string & s, size_t fromPos, const string & search ) {
     return findFrom( *s.inner, fromPos, *search.inner );
 }
 
-int findFrom(const string & s, size_t fromPos, const char * search) {
+int findFrom( const string & s, size_t fromPos, const char * search ) {
     return findFrom( *s.inner, fromPos, search );
 }
 
-int findFrom(const string & s, size_t fromPos, const char * search, size_t searchsize) {
+int findFrom( const string & s, size_t fromPos, const char * search, size_t searchsize ) {
     return findFrom( *s.inner, fromPos, search, searchsize );
 }
 
-bool includes(const string & s, const string & search) {
+bool includes( const string & s, const string & search ) {
     return includes( *s.inner, *search.inner );
 }
 
-bool includes(const string & s, const char * search) {
+bool includes( const string & s, const char * search ) {
     return includes( *s.inner, search );
 }
 
-bool includes(const string & s, const char * search, size_t searchsize) {
+bool includes( const string & s, const char * search, size_t searchsize ) {
     return includes( *s.inner, search, searchsize );
 }
 
-bool startsWith(const string & s, const string & prefix) {
+bool startsWith( const string & s, const string & prefix ) {
     return startsWith( *s.inner, *prefix.inner );
 }
 
-bool startsWith(const string & s, const char * prefix) {
+bool startsWith( const string & s, const char * prefix ) {
     return startsWith( *s.inner, prefix );
 }
 
-bool startsWith(const string & s, const char * prefix, size_t prefixsize) {
+bool startsWith( const string & s, const char * prefix, size_t prefixsize ) {
     return startsWith( *s.inner, prefix, prefixsize );
 }
 
-bool endsWith(const string & s, const string & suffix) {
+bool endsWith( const string & s, const string & suffix ) {
     return endsWith( *s.inner, *suffix.inner );
 }
 
-bool endsWith(const string & s, const char * suffix) {
+bool endsWith( const string & s, const char * suffix ) {
     return endsWith( *s.inner, suffix );
 }
 
-bool endsWith(const string & s, const char * suffix, size_t suffixsize) {
+bool endsWith( const string & s, const char * suffix, size_t suffixsize ) {
     return endsWith( *s.inner, suffix, suffixsize );
 }
@@ -431,5 +485,5 @@
 // charclass, include, exclude
 
-void ?{}( charclass & s, const string & chars) {
+void ?{}( charclass & s, const string & chars ) {
     (s.inner) { malloc() };
     ?{}( *s.inner, *(const string_res *)chars.inner );
@@ -453,19 +507,18 @@
 
 
-int exclude(const string & s, const charclass & mask) {
+int exclude( const string & s, const charclass & mask ) {
     return exclude( *s.inner, *mask.inner );
 }
 /*
-StrSlice exclude(string & s, const charclass & mask) {
+StrSlice exclude( string & s, const charclass & mask ) {
 }
 */
 
-int include(const string & s, const charclass & mask) {
+int include( const string & s, const charclass & mask ) {
     return include( *s.inner, *mask.inner );
 }
 
 /*
-StrSlice include(string & s, const charclass & mask) {
+StrSlice include( string & s, const charclass & mask ) {
 }
 */
-
