Changeset bc547d3
- Timestamp:
- May 8, 2026, 6:09:22 PM (7 hours ago)
- Branches:
- master
- Parents:
- 2f16569
- Location:
- libcfa/src/collections
- Files:
-
- 2 edited
-
string.cfa (modified) (20 diffs)
-
string.hfa (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/collections/string.cfa
r2f16569 rbc547d3 10 10 // Created On : Fri Sep 03 11:00:00 2021 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri May 8 0 7:41:00202613 // Update Count : 4 0912 // Last Modified On : Fri May 8 08:38:51 2026 13 // Update Count : 413 14 14 // 15 15 … … 57 57 } 58 58 59 void ?{}( string & s, const char * cs) {59 void ?{}( string & s, const char cs[] ) { 60 60 (s.inner) { malloc() }; 61 61 ?{}( *s.inner, cs ); 62 62 } 63 63 64 void ?{}( string & s, const char * cs, size_t size ) {64 void ?{}( string & s, const char cs[] , size_t size ) { 65 65 (s.inner) { malloc() }; 66 66 ?{}( *s.inner, cs, size ); … … 128 128 } 129 129 130 string & ?=?( string & s, const char * rhs) {130 string & ?=?( string & s, const char rhs[] ) { 131 131 (*s.inner) = rhs; 132 132 return s; … … 138 138 } 139 139 140 string & assign( string & s, const char * rhs, size_t n ) {140 string & assign( string & s, const char rhs[], size_t n ) { 141 141 assign( *s.inner, rhs, n ); 142 142 return s; … … 177 177 178 178 // safe conversion from string to char * 179 char * strncpy( char * dst, string & src, size_t n ) {179 char * strncpy( char dst[], string & src, size_t n ) { 180 180 size_t l = min( n - 1, len( src ) ); // ensure null terminated 181 181 for ( i; l ) dst[i] = src[i]; … … 273 273 } 274 274 275 void ?+=?( string & s, const char * cs) {275 void ?+=?( string & s, const char cs[] ) { 276 276 (*s.inner) += cs; 277 277 } 278 278 279 void append( string & s, const char * buffer, size_t bsize ) {279 void append( string & s, const char buffer[], size_t bsize ) { 280 280 append( (*s.inner), buffer, bsize ); 281 281 } … … 299 299 } 300 300 301 string ?+?( const char * cs, char c ) {301 string ?+?( const char cs[], char c ) { 302 302 string ret = cs; 303 303 ret += c; … … 305 305 } 306 306 307 string ?+?( char c, const char * cs) {307 string ?+?( char c, const char cs[] ) { 308 308 string ret = c; 309 309 ret += cs; … … 311 311 } 312 312 313 string ?+?( const char * cs1, const char * cs2) {313 string ?+?( const char cs1[], const char cs2[] ) { 314 314 string ret = cs1; 315 315 ret += cs2; … … 317 317 } 318 318 319 string ?+?( const char * cs, string s ) {319 string ?+?( const char cs[], string s ) { 320 320 string ret = cs; 321 321 ret += s; … … 323 323 } 324 324 325 string ?+?( string s, const char * cs) {325 string ?+?( string s, const char cs[] ) { 326 326 string ret = s; 327 327 ret += cs; … … 354 354 } 355 355 356 string ?*?( const char * cs, strmul_factor_t factor ) {356 string ?*?( const char cs[], strmul_factor_t factor ) { 357 357 string ret = cs; 358 358 ret *= factor; … … 384 384 } 385 385 386 int strncmp( const string & s, const char * cs, size_t maxlen ) {386 int strncmp( const string & s, const char cs[], size_t maxlen ) { 387 387 size_t cslen = len( cs ); 388 388 if ( maxlen > len( s ) || maxlen > cslen ) { … … 392 392 } 393 393 394 int strncmp( const char * s, const string & cs, size_t maxlen ) {395 size_t slen = len( s );396 if ( maxlen > slen || maxlen > len( cs ) ) {397 abort( STRNCPY_FMT, maxlen, slen, len( cs ) );394 int strncmp( const char cs[], const string & s, size_t maxlen ) { 395 size_t slen = len( cs ); 396 if ( maxlen > slen || maxlen > len( s ) ) { 397 abort( STRNCPY_FMT, maxlen, slen, len( s ) ); 398 398 } // if 399 return strcmp$( s, maxlen, cs.inner->Handle.s, maxlen );399 return strcmp$( cs, maxlen, s.inner->Handle.s, maxlen ); 400 400 } 401 401 … … 425 425 } 426 426 427 size_t find( const string & s, const char * key) {427 size_t find( const string & s, const char key[] ) { 428 428 return find( *s.inner, key ); 429 429 } 430 430 431 size_t find( const string & s, const char * key, size_t keysize ) {431 size_t find( const string & s, const char key[], size_t keysize ) { 432 432 return find( *s.inner, key, keysize ); 433 433 } … … 437 437 } 438 438 439 size_t find( const string & s, size_t start, const char * key) {439 size_t find( const string & s, size_t start, const char key[] ) { 440 440 return findFrom( *s.inner, start, key ); 441 441 } 442 442 443 size_t find( const string & s, size_t start, const char * key, size_t keysize ) {443 size_t find( const string & s, size_t start, const char key[], size_t keysize ) { 444 444 return findFrom( *s.inner, start, key, keysize ); 445 445 } … … 449 449 // } 450 450 451 // bool includes( const string & s, const char * search) {451 // bool includes( const string & s, const char search[] ) { 452 452 // return includes( *s.inner, search ); 453 453 // } 454 454 455 // bool includes( const string & s, const char * search, size_t searchsize ) {455 // bool includes( const string & s, const char search[], size_t searchsize ) { 456 456 // return includes( *s.inner, search, searchsize ); 457 457 // } … … 461 461 } 462 462 463 bool startsWith( const string & s, const char * prefix) {463 bool startsWith( const string & s, const char prefix[] ) { 464 464 return startsWith( *s.inner, prefix ); 465 465 } 466 466 467 bool startsWith( const string & s, const char * prefix, size_t prefixsize ) {467 bool startsWith( const string & s, const char prefix[], size_t prefixsize ) { 468 468 return startsWith( *s.inner, prefix, prefixsize ); 469 469 } … … 473 473 } 474 474 475 bool endsWith( const string & s, const char * suffix) {475 bool endsWith( const string & s, const char suffix[] ) { 476 476 return endsWith( *s.inner, suffix ); 477 477 } 478 478 479 bool endsWith( const string & s, const char * suffix, size_t suffixsize ) {479 bool endsWith( const string & s, const char suffix[], size_t suffixsize ) { 480 480 return endsWith( *s.inner, suffix, suffixsize ); 481 481 } … … 490 490 } 491 491 492 void ?{}( charclass & s, const char * chars) {492 void ?{}( charclass & s, const char chars[] ) { 493 493 (s.inner) { malloc() }; 494 494 ?{}( *s.inner, chars ); 495 495 } 496 496 497 void ?{}( charclass & s, const char * chars, size_t charssize ) {497 void ?{}( charclass & s, const char chars[], size_t charssize ) { 498 498 (s.inner) { malloc() }; 499 499 ?{}( *s.inner, chars, charssize ); -
libcfa/src/collections/string.hfa
r2f16569 rbc547d3 10 10 // Created On : Fri Sep 03 11:00:00 2021 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri May 8 07:40:57202613 // Update Count : 3 5312 // Last Modified On : Fri May 8 18:07:38 2026 13 // Update Count : 367 14 14 // 15 15 … … 33 33 PBOOST void ?{}( string & s, string s2 ); 34 34 void ?{}( string & s, char ); 35 void ?{}( string & s, const char * cs); // copy from string literal (NULL-terminated)36 void ?{}( string & s, const char * cs, size_t size ); // copy specific length from buffer35 void ?{}( string & s, const char cs[] ); // copy from string literal (NULL-terminated) 36 void ?{}( string & s, const char cs[], size_t size ); // copy specific length from buffer 37 37 void ?{}( string & s, size_t rhs ); 38 38 void ?{}( string & s, ssize_t rhs ); … … 44 44 PBOOST string & ?=?( string & s, string rhs ); 45 45 string & ?=?( string & s, char rhs ); // copy from 'l' 46 string & ?=?( string & s, const char * rhs); // copy from "literal"46 string & ?=?( string & s, const char rhs[] ); // copy from "literal" 47 47 string & assign( string & s, const string & rhs, size_t n ); 48 string & assign( string & s, const char * rhs, size_t n );48 string & assign( string & s, const char rhs[], size_t n ); 49 49 string & ?=?( string & s, size_t rhs ); 50 50 string & ?=?( string & s, ssize_t rhs ); … … 56 56 // Conversion 57 57 static inline string tostr( char c ) { string s = c; return s; } 58 static inline string tostr( const char * cs) { string s = cs; return s; }58 static inline string tostr( const char cs[] ) { string s = cs; return s; } 59 59 static inline string tostr( size_t v ) { string s = v; return s; } 60 60 static inline string tostr( ssize_t v ) { string s = v; return s; } … … 64 64 65 65 // C compatibility 66 static inline string & strcpy( string & s, const char * cs) { s = cs; return s; }67 static inline string & strncpy( string & s, const char * cs, size_t n ) { assign( s, cs, n ); return s; }66 static inline string & strcpy( string & s, const char cs[] ) { s = cs; return s; } 67 static inline string & strncpy( string & s, const char cs[], size_t n ) { assign( s, cs, n ); return s; } 68 68 static inline string & strcpy( string & s1, const string & s2 ) { s1 = s2; return s1; } 69 69 static inline string & strncpy( string & s, const string & cs, size_t n ) { assign( s, cs, n ); return s; } 70 char * strncpy( char * dst, string & src, size_t n );70 char * strncpy( char dst[], string & src, size_t n ); 71 71 char * ?=?( char *& dst, string & src ); 72 72 void ?{}( char *& dst, string & src ); … … 81 81 // Getters 82 82 static inline size_t len( const string & s ) { return len( *s.inner ); } 83 static inline size_t len( const char * cs) { return strlen( cs ); };83 static inline size_t len( const char cs[] ) { return strlen( cs ); }; 84 84 static inline size_t strlen( const string & s ) { return len( s ); } 85 85 size_t strnlen( const string & s, size_t maxlen ); … … 119 119 inline _Istream_str_base; 120 120 }; // _Istream_Swidth 121 122 // Restrict nesting of input manipulators to those combinations that make sense. 121 123 122 124 struct _Istream_Squote { … … 166 168 PBOOST void ?+=?( string & s, string ); 167 169 void append( string & s, const string & s2, size_t maxlen ); 168 void ?+=?( string & s, const char * cs);169 void append( string & s, const char * buffer, size_t bsize );170 void ?+=?( string & s, const char cs[] ); 171 void append( string & s, const char buffer[], size_t bsize ); 170 172 171 173 string ?+?( string s, char c ); 172 174 string ?+?( char c, string s ); 173 175 PBOOST string ?+?( string s, string s2 ); 174 string ?+?( const char * cs, char c ); // not backwards compatible175 string ?+?( char c, const char * cs);176 string ?+?( const char * cs1 , const char * cs2);177 string ?+?( const char * cs, string s );178 string ?+?( string s, const char * cs);176 string ?+?( const char cs[], char c ); // not backwards compatible 177 string ?+?( char c, const char cs[] ); 178 string ?+?( const char cs1[] , const char cs2[] ); 179 string ?+?( const char cs[] , string s ); 180 string ?+?( string s, const char cs[] ); 179 181 string ?+?( char, char ); // not being called 8-( 180 182 181 183 static inline string & strcat( string & s1, const string & s2 ) { s1 += s2; return s1; } 182 static inline string & strcat( string & s, const char * cs) { s += cs; return s; }184 static inline string & strcat( string & s, const char cs[] ) { s += cs; return s; } 183 185 static inline string & strncat( string & s1, const string & s2, size_t maxlen ) { append( s1, s2, maxlen ); return s1; } 184 static inline string & strncat( string & s, const char * buffer, size_t bsize ) { append( s, buffer, bsize ); return s; }186 static inline string & strncat( string & s, const char buffer[], size_t bsize ) { append( s, buffer, bsize ); return s; } 185 187 186 188 // Repetition … … 194 196 string ?*?( char c, strmul_factor_t factor ); // not backwards compatible 195 197 PBOOST string ?*?( string s, strmul_factor_t factor ); 196 string ?*?( const char * cs, strmul_factor_t factor );198 string ?*?( const char cs[], strmul_factor_t factor ); 197 199 static inline string ?*?( strmul_factor_t factor, char c ) { return c * factor; } 198 200 PBOOST static inline string ?*?( strmul_factor_t factor, string s ) { return s * factor; } 199 static inline string ?*?( strmul_factor_t factor, const char * cs) { return cs * factor; }201 static inline string ?*?( strmul_factor_t factor, const char cs[] ) { return cs * factor; } 200 202 201 203 // Character access … … 214 216 static inline bool ?<? ( const string & s1, const string & s2 ) { return *s1.inner < *s2.inner; } 215 217 216 static inline int strcmp( const string & s 1, const char * s2 ) { return strcmp( *s1.inner, s2); }217 int strncmp( const string & s1, const char * s2, size_t maxlen );218 static inline bool ?==?( const string & s 1, const char * s2 ) { return *s1.inner == s2; }219 static inline bool ?!=?( const string & s 1, const char * s2 ) { return *s1.inner != s2; }220 static inline bool ?>? ( const string & s 1, const char * s2 ) { return *s1.inner > s2; }221 static inline bool ?>=?( const string & s 1, const char * s2 ) { return *s1.inner >= s2; }222 static inline bool ?<=?( const string & s 1, const char * s2 ) { return *s1.inner <= s2; }223 static inline bool ?<? ( const string & s 1, const char * s2 ) { return *s1.inner < s2; }224 225 static inline int strcmp( const char * s1, const string & s2 ) { return strcmp( s1, *s2.inner ); }226 int strncmp( const char * s1, const string & s2, size_t maxlen );227 static inline bool ?==?( const char * s1, const string & s2 ) { return s1 == *s2.inner; }228 static inline bool ?!=?( const char * s1, const string & s2 ) { return s1 != *s2.inner; }229 static inline bool ?>? ( const char * s1, const string & s2 ) { return s1 > *s2.inner; }230 static inline bool ?>=?( const char * s1, const string & s2 ) { return s1 >= *s2.inner; }231 static inline bool ?<=?( const char * s1, const string & s2 ) { return s1 <= *s2.inner; }232 static inline bool ?<? ( const char * s1, const string & s2 ) { return s1 < *s2.inner; }218 static inline int strcmp( const string & s, const char cs[] ) { return strcmp( *s.inner, cs ); } 219 int strncmp( const string & s1, const char cs[], size_t maxlen ); 220 static inline bool ?==?( const string & s, const char cs[] ) { return *s.inner == cs; } 221 static inline bool ?!=?( const string & s, const char cs[] ) { return *s.inner != cs; } 222 static inline bool ?>? ( const string & s, const char cs[] ) { return *s.inner > cs; } 223 static inline bool ?>=?( const string & s, const char cs[] ) { return *s.inner >= cs; } 224 static inline bool ?<=?( const string & s, const char cs[] ) { return *s.inner <= cs; } 225 static inline bool ?<? ( const string & s, const char cs[] ) { return *s.inner < cs; } 226 227 static inline int strcmp( const char cs[], const string & s ) { return strcmp( cs, *s.inner ); } 228 int strncmp( const char cs[], const string & s, size_t maxlen ); 229 static inline bool ?==?( const char cs[], const string & s ) { return cs == *s.inner; } 230 static inline bool ?!=?( const char cs[], const string & s ) { return cs != *s.inner; } 231 static inline bool ?>? ( const char cs[], const string & s ) { return cs > *s.inner; } 232 static inline bool ?>=?( const char cs[], const string & s ) { return cs >= *s.inner; } 233 static inline bool ?<=?( const char cs[], const string & s ) { return cs <= *s.inner; } 234 static inline bool ?<? ( const char cs[], const string & s ) { return cs < *s.inner; } 233 235 234 236 // String search 235 237 236 238 size_t find( const string & s, char key ); 237 size_t find( const string & s, const char * key);239 size_t find( const string & s, const char key[] ); 238 240 size_t find( const string & s, const string & key ); 239 size_t find( const string & s, const char * key, size_t keysize );241 size_t find( const string & s, const char key[], size_t keysize ); 240 242 241 243 size_t find( const string & s, size_t start, char key ); 242 244 size_t find( const string & s, size_t start, const string & key ); 243 size_t find( const string & s, size_t start, const char * key);244 size_t find( const string & s, size_t start, const char * key, size_t keysize );245 size_t find( const string & s, size_t start, const char key[] ); 246 size_t find( const string & s, size_t start, const char key[], size_t keysize ); 245 247 246 248 static inline bool includes( const string & s, char key ) { return find( s, key ) < len( s ); } 247 static inline bool includes( const string & s, const char * key) { return find( s, key ) < len( s ); }249 static inline bool includes( const string & s, const char key[] ) { return find( s, key ) < len( s ); } 248 250 static inline bool includes( const string & s, const string & key ) { return find( s, key ) < len( s ); } 249 static inline bool includes( const string & s, const char * key, size_t keysize ){ return find( s, key, keysize ) < len( s ); }251 static inline bool includes( const string & s, const char key[], size_t keysize ){ return find( s, key, keysize ) < len( s ); } 250 252 251 253 bool startsWith( const string & s, const string & prefix ); 252 bool startsWith( const string & s, const char * prefix);253 bool startsWith( const string & s, const char * prefix, size_t prefixsize );254 bool startsWith( const string & s, const char prefix[] ); 255 bool startsWith( const string & s, const char prefix[], size_t prefixsize ); 254 256 255 257 bool endsWith( const string & s, const string & suffix ); 256 bool endsWith( const string & s, const char * suffix);257 bool endsWith( const string & s, const char * suffix, size_t suffixsize );258 bool endsWith( const string & s, const char suffix[] ); 259 bool endsWith( const string & s, const char suffix[], size_t suffixsize ); 258 260 259 261 // Slicing … … 264 266 static inline string ?()( string & s, char m ) { return s( find( s, m ), 1 )`share; } 265 267 static inline string ?()( const string & s, char m ) { string & w = (string &)s; return w( find( s, m ), 1 )`share; } // FIX ME 266 static inline string ?()( string & s, const char * m) { return s( find( s, m ), len( m ) )`share; }267 static inline string ?()( const string & s, const char * m) { string & w = (string &)s; return w( find( s, m ), len( m ) )`share; } // FIX ME268 static inline string ?()( string & s, const char m[] ) { return s( find( s, m ), len( m ) )`share; } 269 static inline string ?()( const string & s, const char m[] ) { string & w = (string &)s; return w( find( s, m ), len( m ) )`share; } // FIX ME 268 270 static inline string ?()( string & s, const string & m ) { return s( find( s, m ), len( m ) )`share; } 269 271 static inline string ?()( const string & s, const string & m ) { string & w = (string &)s; return w( find( s, m ), len( m ) )`share; } // FIX ME … … 278 280 279 281 void ?{}( charclass &, const string & chars ); 280 void ?{}( charclass &, const char * chars);281 void ?{}( charclass &, const char * chars, size_t charssize );282 void ?{}( charclass &, const char chars[] ); 283 void ?{}( charclass &, const char chars[], size_t charssize ); 282 284 void ^?{}( charclass & ); 283 285 284 286 size_t include( const string & s, const charclass & mask ); 285 static inline size_t include( const string & s, const char * mask) { return include( s, (charclass){ mask } ); }287 static inline size_t include( const string & s, const char mask[] ) { return include( s, (charclass){ mask } ); } 286 288 static inline size_t include( const string & s, const string & mask ) { return include( s, (charclass){ mask } ); } 287 static inline size_t include( const char * cs, const charclass & mask ) { return include( (string){ cs }, mask ); }288 static inline size_t include( const char * cs, const char * mask) { return include( (string){ cs }, (charclass){ mask } ); }289 static inline size_t include( const char * cs, const string & mask ) { return include( (string){ cs }, (charclass){ mask } ); }289 static inline size_t include( const char cs[], const charclass & mask ) { return include( (string){ cs }, mask ); } 290 static inline size_t include( const char cs[], const char mask[] ) { return include( (string){ cs }, (charclass){ mask } ); } 291 static inline size_t include( const char cs[], const string & mask ) { return include( (string){ cs }, (charclass){ mask } ); } 290 292 291 293 static inline string include( const string & s, const charclass & mask ) { return s( 0, include( s, mask ) ); } 292 static inline string include( const string & s, const char * mask) { return s( 0, include( s, (charclass){ mask } ) ); }294 static inline string include( const string & s, const char mask[] ) { return s( 0, include( s, (charclass){ mask } ) ); } 293 295 static inline string include( const string & s, const string & mask ) { return s( 0, include( s, (charclass){ mask } ) ); } 294 static inline string include( const char * cs, const charclass & mask ) { const string s = cs; return s( 0, include( s, mask ) ); }295 static inline string include( const char * cs, const char * mask) { const string s = cs; return s( 0, include( s, (charclass){ mask } ) ); }296 static inline string include( const char * cs, const string & mask ) { const string s = cs; return s( 0, include( s, (charclass){ mask } ) ); }296 static inline string include( const char cs[], const charclass & mask ) { const string s = cs; return s( 0, include( s, mask ) ); } 297 static inline string include( const char cs[], const char mask[] ) { const string s = cs; return s( 0, include( s, (charclass){ mask } ) ); } 298 static inline string include( const char cs[], const string & mask ) { const string s = cs; return s( 0, include( s, (charclass){ mask } ) ); } 297 299 298 300 size_t exclude( const string & s, const charclass & mask ); 299 static inline size_t exclude( const string & s, const char * mask) { return exclude( s, (charclass){ mask } ); }301 static inline size_t exclude( const string & s, const char mask[] ) { return exclude( s, (charclass){ mask } ); } 300 302 static inline size_t exclude( const string & s, const string & mask ) { return exclude( s, (charclass){ mask } ); } 301 static inline size_t exclude( const char * cs, const charclass & mask ) { return exclude( (string){ cs }, mask ); }302 static inline size_t exclude( const char * cs, const string & mask ) { return exclude( (string){ cs }, (charclass){ mask } ); }303 static inline size_t exclude( const char * cs, const char * mask) { return exclude( (string){ cs }, (charclass){ mask } ); }303 static inline size_t exclude( const char cs[], const charclass & mask ) { return exclude( (string){ cs }, mask ); } 304 static inline size_t exclude( const char cs[], const string & mask ) { return exclude( (string){ cs }, (charclass){ mask } ); } 305 static inline size_t exclude( const char cs[], const char mask[] ) { return exclude( (string){ cs }, (charclass){ mask } ); } 304 306 305 307 static inline string exclude( const string & s, const charclass & mask ) { return s( 0, exclude( s, mask ) ); } 306 static inline string exclude( const string & s, const char * mask) { return s( 0, exclude( s, (charclass){ mask } ) ); }308 static inline string exclude( const string & s, const char mask[] ) { return s( 0, exclude( s, (charclass){ mask } ) ); } 307 309 static inline string exclude( const string & s, const string & mask ) { return s( 0, exclude( s, (charclass){ mask } ) ); } 308 static inline string exclude( const char * cs, const charclass & mask ) { const string s = cs; return s( 0, exclude( s, mask ) ); }309 static inline string exclude( const char * cs, const string & mask ) { const string s = cs; return s( 0, exclude( s, (charclass){ mask } ) ); }310 static inline string exclude( const char * cs, const char * mask) { const string s = cs; return s( 0, exclude( s, (charclass){ mask } ) ); }310 static inline string exclude( const char cs[], const charclass & mask ) { const string s = cs; return s( 0, exclude( s, mask ) ); } 311 static inline string exclude( const char cs[], const string & mask ) { const string s = cs; return s( 0, exclude( s, (charclass){ mask } ) ); } 312 static inline string exclude( const char cs[], const char mask[] ) { const string s = cs; return s( 0, exclude( s, (charclass){ mask } ) ); } 311 313 312 314 size_t include( const string & s, int (* f)( int ) ); // for C character-class functions, e.g., isdigit 313 static inline size_t include( const char * cs, int (* f)( int ) ) { return include( (string){ cs }, f ); }315 static inline size_t include( const char cs[], int (* f)( int ) ) { return include( (string){ cs }, f ); } 314 316 static inline string include( const string & s, int (* f)( int ) ) { return s( 0, include( s, f ) ); } 315 static inline string include( const char * cs, int (* f)( int ) ) { const string s = cs; return s( 0, include( s, f ) ); }317 static inline string include( const char cs[], int (* f)( int ) ) { const string s = cs; return s( 0, include( s, f ) ); } 316 318 317 319 static inline size_t include( const string & s, bool (* f)( char ) ) { return include( s, (int (*)( int ))f ); } 318 static inline size_t include( const char * cs, bool (* f)( char ) ) { return include( (string){ cs }, f ); }320 static inline size_t include( const char cs[], bool (* f)( char ) ) { return include( (string){ cs }, f ); } 319 321 static inline string include( const string & s, bool (* f)( char ) ) { return s( 0, include( s, f ) ); } 320 static inline string include( const char * cs, bool (* f)( char ) ) { const string s = cs; return s( 0, include( s, f ) ); }322 static inline string include( const char cs[], bool (* f)( char ) ) { const string s = cs; return s( 0, include( s, f ) ); } 321 323 322 324 size_t exclude( const string & s, int (* f)( int ) ); // for C character-class functions, e.g., isdigit 323 static inline size_t exclude( const char * cs, int (* f)( int ) ) { return exclude( (string){ cs }, f ); }325 static inline size_t exclude( const char cs[], int (* f)( int ) ) { return exclude( (string){ cs }, f ); } 324 326 static inline string exclude( const string & s, int (* f)( int ) ) { return s( 0, exclude( s, f ) ); } 325 static inline string exclude( const char * cs, int (* f)( int ) ) { const string s = cs; return s( 0, exclude( s, f ) ); }327 static inline string exclude( const char cs[], int (* f)( int ) ) { const string s = cs; return s( 0, exclude( s, f ) ); } 326 328 327 329 static inline size_t exclude( const string & s, bool (* f)( char ) ) { return exclude( s, (int (*)( int ))f ); } 328 static inline size_t exclude( const char * cs, bool (* f)( char ) ) { return exclude( (string){ cs }, f ); }330 static inline size_t exclude( const char cs[], bool (* f)( char ) ) { return exclude( (string){ cs }, f ); } 329 331 static inline string exclude( const string & s, bool (* f)( char ) ) { return s( 0, exclude( s, f ) ); } 330 static inline string exclude( const char * cs, bool (* f)( char ) ) { const string s = cs; return s( 0, exclude( s, f ) ); }332 static inline string exclude( const char cs[], bool (* f)( char ) ) { const string s = cs; return s( 0, exclude( s, f ) ); } 331 333 332 334 string replace( const string & s, const string & from, const string & to ); 333 static inline string replace( const char * cs, const char * from, const char * to) { return replace( (string){ cs }, (string){ from }, (string){ to } ); }334 static inline string replace( const string & s, const char * from, const char * to) { return replace( s, (string){ from }, (string){ to } ); }335 static inline string replace( const string & s, const char * from, const string & to ) { return replace( s, (string){ from }, to ); }336 static inline string replace( const string & s, string & from, const char * to) { return replace( s, from, (string){ to } ); }335 static inline string replace( const char cs[], const char from[], const char to[] ) { return replace( (string){ cs }, (string){ from }, (string){ to } ); } 336 static inline string replace( const string & s, const char from[], const char to[] ) { return replace( s, (string){ from }, (string){ to } ); } 337 static inline string replace( const string & s, const char from[], const string & to ) { return replace( s, (string){ from }, to ); } 338 static inline string replace( const string & s, string & from, const char to[] ) { return replace( s, from, (string){ to } ); } 337 339 338 340 string translate( const string & s, int (* f)( int ) ); // for C character-class functions, e.g., isdigit 339 static inline string translate( const char * cs, int (* f)( int ) ) { return translate( (string){ cs }, f ); }341 static inline string translate( const char cs[], int (* f)( int ) ) { return translate( (string){ cs }, f ); } 340 342 341 343 static inline string translate( const string & s, bool (* f)( char ) ) { return translate( s, (int (*)( int ))f ); } 342 static inline string translate( const char * cs, bool (* f)( char ) ) { return translate( (string){ cs }, f ); }344 static inline string translate( const char cs[], bool (* f)( char ) ) { return translate( (string){ cs }, f ); } 343 345 344 346 #ifndef _COMPILING_STRING_CFA_
Note:
See TracChangeset
for help on using the changeset viewer.