Changeset 5ad6f0d
- Timestamp:
- Apr 13, 2025, 9:15:33 PM (5 months ago)
- Branches:
- master
- Children:
- b0296dba
- Parents:
- a514fed
- Location:
- libcfa/src/collections
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/collections/string.cfa
ra514fed r5ad6f0d 10 10 // Created On : Fri Sep 03 11:00:00 2021 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 11 18:18:07202513 // Update Count : 3 7012 // Last Modified On : Sun Apr 13 07:58:55 2025 13 // Update Count : 390 14 14 // 15 15 … … 202 202 return s; 203 203 } 204 205 //////////////////////////////////////////////////////// 206 // Getter 207 208 size_t strnlen( const string & s, size_t maxlen ) { return min( len( s ), maxlen ); } 204 209 205 210 //////////////////////////////////////////////////////// … … 265 270 266 271 //////////////////////////////////////////////////////// 267 // Comparison268 269 int strcmp( const string & s1, const string & s2 ) { return strcmp( *s1.inner, *s2.inner ); }270 bool ?==?( const string & s1, const string & s2 ) { return *s1.inner == *s2.inner; }271 bool ?!=?( const string & s1, const string & s2 ) { return *s1.inner != *s2.inner; }272 bool ?>? ( const string & s1, const string & s2 ) { return *s1.inner > *s2.inner; }273 bool ?>=?( const string & s1, const string & s2 ) { return *s1.inner >= *s2.inner; }274 bool ?<=?( const string & s1, const string & s2 ) { return *s1.inner <= *s2.inner; }275 bool ?<? ( const string & s1, const string & s2 ) { return *s1.inner < *s2.inner; }276 277 int strcmp( const string & s1, const char * s2 ) { return strcmp( *s1.inner, s2 ); }278 bool ?==?( const string & s1, const char * s2 ) { return *s1.inner == s2; }279 bool ?!=?( const string & s1, const char * s2 ) { return *s1.inner != s2; }280 bool ?>? ( const string & s1, const char * s2 ) { return *s1.inner > s2; }281 bool ?>=?( const string & s1, const char * s2 ) { return *s1.inner >= s2; }282 bool ?<=?( const string & s1, const char * s2 ) { return *s1.inner <= s2; }283 bool ?<? ( const string & s1, const char * s2 ) { return *s1.inner < s2; }284 285 int strcmp( const char * s1, const string & s2 ) { return strcmp( s1, *s2.inner ); }286 bool ?==?( const char * s1, const string & s2 ) { return s1 == *s2.inner; }287 bool ?!=?( const char * s1, const string & s2 ) { return s1 != *s2.inner; }288 bool ?>? ( const char * s1, const string & s2 ) { return s1 > *s2.inner; }289 bool ?>=?( const char * s1, const string & s2 ) { return s1 >= *s2.inner; }290 bool ?<=?( const char * s1, const string & s2 ) { return s1 <= *s2.inner; }291 bool ?<? ( const char * s1, const string & s2 ) { return s1 < *s2.inner; }292 293 ////////////////////////////////////////////////////////294 272 // Concatenation 295 273 … … 403 381 string ret = { *s.inner, index, 1 }; 404 382 return ret`share; 383 } 384 385 //////////////////////////////////////////////////////// 386 // Comparison 387 388 #define STRNCPY_FMT "**** Error **** strncpy: maximum length %zu is greater than string lengths %zd or %zd." 389 390 int strncmp( const string & s1, const string & s2, size_t maxlen ) { 391 if ( maxlen > len( s1 ) || maxlen > len( s2 ) ) { 392 abort( STRNCPY_FMT, maxlen, len( s1 ), len( s2 ) ); 393 } // if 394 return strcmp$( s1.inner->Handle.s, maxlen, s2.inner->Handle.s, maxlen ); 395 } 396 397 int strncmp( const string & s1, const char * s2, size_t maxlen ) { 398 size_t s2len = len( s2 ); 399 if ( maxlen > len( s1 ) || maxlen > s2len ) { 400 abort( STRNCPY_FMT, maxlen, len( s1 ), s2len ); 401 } // if 402 return strcmp$( s1.inner->Handle.s, maxlen, s2, maxlen ); 403 } 404 405 int strncmp( const char * s1, const string & s2, size_t maxlen ) { 406 size_t s1len = len( s1 ); 407 if ( maxlen > s1len || maxlen > len( s2 ) ) { 408 abort( STRNCPY_FMT, maxlen, s1len, len( s2 ) ); 409 } // if 410 return strcmp$( s1, maxlen, s2.inner->Handle.s, maxlen ); 405 411 } 406 412 … … 523 529 } 524 530 525 size_t test( const string & s, int (*f)( int ) ) {531 size_t include( const string & s, int (*f)( int ) ) { 526 532 size_t l = len( s ); 527 533 for ( i; l ) { … … 531 537 } 532 538 533 string replace( string & s, const string & from, const string & to ) { 539 size_t exclude( const string & s, int (*f)( int ) ) { 540 size_t l = len( s ); 541 for ( i; l ) { 542 if ( f( s[i] ) ) return i; 543 } // for 544 return l; 545 } 546 547 string replace( const string & s, const string & from, const string & to ) { 534 548 ssize_t pos; 535 549 string r; -
libcfa/src/collections/string.hfa
ra514fed r5ad6f0d 10 10 // Created On : Fri Sep 03 11:00:00 2021 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 11 18:13:35 202513 // Update Count : 2 6112 // Last Modified On : Sun Apr 13 21:03:35 2025 13 // Update Count : 284 14 14 // 15 15 … … 80 80 static inline size_t len( const char * cs ) { return strlen( cs ); }; 81 81 static inline size_t strlen( const string & s ) { return len( s ); } 82 size_t strnlen( const string & s, size_t maxlen ); 82 83 83 84 // IO Operator … … 125 126 _Istream_Swidth wdi( unsigned int rwd, string & s ) { return (_Istream_Swidth)@{ .s = s, { {.scanset = 0p}, .wd = rwd, {.flags.rwd = true} } }; } 126 127 _Istream_Sstr getline( string & s, const char delimiter = '\n' ) { 127 // return (_Istream_Sstr)@{ { .s = s, { {.delimiters = { delimiter, '\0' } }, .wd = -1, {.flags.delimiter = true} } } };128 128 return (_Istream_Sstr)@{ .s = s, { {.delimiters = { delimiter, '\0' } }, .wd = -1, {.flags.delimiter = true} } }; 129 129 } … … 138 138 return (_Istream_Squote &)f; 139 139 } 140 // _Istream_Sstr incl( const char scanset[], string & s ) { return (_Istream_Sstr)@{ { .s = s, { {.scanset = scanset}, .wd = -1, {.flags.inex = false} } } }; }141 140 _Istream_Sstr incl( const char scanset[], string & s ) { return (_Istream_Sstr)@{ .s = s, { {.scanset = scanset}, .wd = -1, {.flags.inex = false} } }; } 142 141 _Istream_Sstr & incl( const char scanset[], _Istream_Swidth & f ) { f.scanset = scanset; f.flags.inex = false; return (_Istream_Sstr &)f; } 143 // _Istream_Sstr excl( const char scanset[], string & s ) { return (_Istream_Sstr)@{ { .s = s, { {.scanset = scanset}, .wd = -1, {.flags.inex = true} } } }; }144 142 _Istream_Sstr excl( const char scanset[], string & s ) { return (_Istream_Sstr)@{ .s = s, { {.scanset = scanset}, .wd = -1, {.flags.inex = true} } }; } 145 143 _Istream_Sstr & excl( const char scanset[], _Istream_Swidth & f ) { f.scanset = scanset; f.flags.inex = true; return (_Istream_Sstr &)f; } 146 // _Istream_Sstr ignore( string & s ) { return (_Istream_Sstr)@{ { .s = s, { {.scanset = 0p}, .wd = -1, {.flags.ignore = true} } } }; }147 144 _Istream_Sstr ignore( string & s ) { return (_Istream_Sstr)@{ .s = s, { {.scanset = 0p}, .wd = -1, {.flags.ignore = true} } }; } 148 145 _Istream_Sstr & ignore( _Istream_Swidth & f ) { f.flags.ignore = true; return (_Istream_Sstr &)f; } 149 146 _Istream_Squote & ignore( _Istream_Squote & f ) { f.sstr.flags.ignore = true; return (_Istream_Squote &)f; } 150 // _Istream_Sstr & ignore( _Istream_Sstr & f ) { f.sstr.flags.ignore = true; return (_Istream_Sstr &)f; }151 147 _Istream_Sstr & ignore( _Istream_Sstr & f ) { f.flags.ignore = true; return (_Istream_Sstr &)f; } 152 148 } // distribution … … 201 197 202 198 // Comparisons 203 int strcmp ( const string &, const string & ); 204 bool ?==?( const string &, const string & ); 205 bool ?!=?( const string &, const string & ); 206 bool ?>? ( const string &, const string & ); 207 bool ?>=?( const string &, const string & ); 208 bool ?<=?( const string &, const string & ); 209 bool ?<? ( const string &, const string & ); 210 211 int strcmp( const string &, const char * ); 212 bool ?==?( const string &, const char * ); 213 bool ?!=?( const string &, const char * ); 214 bool ?>? ( const string &, const char * ); 215 bool ?>=?( const string &, const char * ); 216 bool ?<=?( const string &, const char * ); 217 bool ?<? ( const string &, const char * ); 218 219 int strcmp( const char *, const string & ); 220 bool ?==?( const char *, const string & ); 221 bool ?!=?( const char *, const string & ); 222 bool ?>? ( const char *, const string & ); 223 bool ?>=?( const char *, const string & ); 224 bool ?<=?( const char *, const string & ); 225 bool ?<? ( const char *, const string & ); 199 static inline int strcmp( const string & s1, const string & s2 ) { return strcmp( *s1.inner, *s2.inner ); } 200 int strncmp( const string & s1, const string & s2, size_t maxlen ); 201 static inline bool ?==?( const string & s1, const string & s2 ) { return *s1.inner == *s2.inner; } 202 static inline bool ?!=?( const string & s1, const string & s2 ) { return *s1.inner != *s2.inner; } 203 static inline bool ?>? ( const string & s1, const string & s2 ) { return *s1.inner > *s2.inner; } 204 static inline bool ?>=?( const string & s1, const string & s2 ) { return *s1.inner >= *s2.inner; } 205 static inline bool ?<=?( const string & s1, const string & s2 ) { return *s1.inner <= *s2.inner; } 206 static inline bool ?<? ( const string & s1, const string & s2 ) { return *s1.inner < *s2.inner; } 207 208 static inline int strcmp( const string & s1, const char * s2 ) { return strcmp( *s1.inner, s2 ); } 209 int strncmp( const string & s1, const char * s2, size_t maxlen ); 210 static inline bool ?==?( const string & s1, const char * s2 ) { return *s1.inner == s2; } 211 static inline bool ?!=?( const string & s1, const char * s2 ) { return *s1.inner != s2; } 212 static inline bool ?>? ( const string & s1, const char * s2 ) { return *s1.inner > s2; } 213 static inline bool ?>=?( const string & s1, const char * s2 ) { return *s1.inner >= s2; } 214 static inline bool ?<=?( const string & s1, const char * s2 ) { return *s1.inner <= s2; } 215 static inline bool ?<? ( const string & s1, const char * s2 ) { return *s1.inner < s2; } 216 217 static inline int strcmp( const char * s1, const string & s2 ) { return strcmp( s1, *s2.inner ); } 218 int strncmp( const char * s1, const string & s2, size_t maxlen ); 219 static inline bool ?==?( const char * s1, const string & s2 ) { return s1 == *s2.inner; } 220 static inline bool ?!=?( const char * s1, const string & s2 ) { return s1 != *s2.inner; } 221 static inline bool ?>? ( const char * s1, const string & s2 ) { return s1 > *s2.inner; } 222 static inline bool ?>=?( const char * s1, const string & s2 ) { return s1 >= *s2.inner; } 223 static inline bool ?<=?( const char * s1, const string & s2 ) { return s1 <= *s2.inner; } 224 static inline bool ?<? ( const char * s1, const string & s2 ) { return s1 < *s2.inner; } 226 225 227 226 // String search … … 279 278 280 279 size_t include( const string & s, const charclass & mask ); 281 static inline size_t include( const char * s, const charclass & mask ) { string temp = s; return include( temp, mask ); }282 static inline string include( const string & s, const charclass & mask ) { ssize_t i = include( s, mask ); return s( 0, i )`share; }283 static inline string include( const char * s, const charclass & mask ) { string temp = s; ssize_t i = include( temp, mask ); return temp( 0, i); }280 static inline size_t include( const char * cs, const charclass & mask ) { const string s = cs; return include( s, mask ); } 281 static inline string include( const string & s, const charclass & mask ) { return s( 0, include( s, mask ) ); } 282 static inline string include( const char * cs, const charclass & mask ) { const string s = cs; return s( 0, include( s, mask ) ); } 284 283 285 284 size_t exclude( const string & s, const charclass & mask ); 286 static inline size_t exclude( const char * s, const charclass & mask ) { string temp = s; return exclude( temp, mask ); } 287 static inline string exclude( const string & s, const charclass & mask ) { ssize_t i = exclude( s, mask ); return s( 0, i )`share; } 288 static inline string exclude( const char * s, const charclass & mask ) { string temp = s; ssize_t i = exclude( temp, mask ); return temp( 0, i ); } 289 290 size_t test( const string & s, int (*f)( int ) ); 291 static inline size_t test( const char * c, int (*f)( int ) ) { 292 const string S = c; 293 return test( S, f ); 294 } 295 296 string replace( string & s, const string & from, const string & to ); 297 static inline string replace( const char * s, const char * from, const char * to ) { 298 string S = s, From = from, To = to; 299 return replace( S, From, To ); 300 } 301 static inline string replace( string & s, const char * from, const char * to ) { 302 string From = from, To = to; 303 return replace( s, From, To ); 304 } 305 static inline string replace( string & s, const char * from, const string & to ) { 306 string From = from; 307 return replace( s, From, to ); 308 } 309 static inline string replace( string & s, string & from, const char * to ) { 310 string To = to; 311 return replace( s, from, To ); 312 } 285 static inline size_t exclude( const char * cs, const charclass & mask ) { const string s = cs; return exclude( s, mask ); } 286 static inline string exclude( const string & s, const charclass & mask ) { return s( 0, exclude( s, mask ) ); } 287 static inline string exclude( const char * cs, const charclass & mask ) { const string s = cs; return s( 0, exclude( s, mask ) ); } 288 289 size_t include( const string & s, int (*f)( int ) ); 290 static inline size_t include( const char * cs, int (*f)( int ) ) { const string S = cs; return include( S, f ); } 291 static inline string include( const string & s, int (*f)( int ) ) { return s( 0, include( s, f ) ); } 292 static inline string include( const char * cs, int (*f)( int ) ) { const string s = cs; return s( 0, include( s, f ) ); } 293 294 size_t exclude( const string & s, int (*f)( int ) ); 295 static inline size_t exclude( const char * cs, int (*f)( int ) ) { const string s = cs; return exclude( s, f ); } 296 static inline string exclude( const string & s, int (*f)( int ) ) { return s( 0, exclude( s, f ) ); } 297 static inline string exclude( const char * cs, int (*f)( int ) ) { const string s = cs; return s( 0, exclude( s, f ) ); } 298 299 string replace( const string & s, const string & from, const string & to ); 300 static inline string replace( const char * s, const char * from, const char * to ) { string S = s, From = from, To = to; return replace( S, From, To ); } 301 static inline string replace( const string & s, const char * from, const char * to ) { const string From = from, To = to; return replace( s, From, To ); } 302 static inline string replace( const string & s, const char * from, const string & to ) { const string From = from; return replace( s, From, to ); } 303 static inline string replace( const string & s, string & from, const char * to ) { const string To = to; return replace( s, from, To ); } 313 304 314 305 string translate( const string & s, int (*f)( int ) ); 315 static inline string translate( const char * c, int (*f)( int ) ) { 316 const string S = c; 317 return translate( S, f ); 318 } 306 static inline string translate( const char * c, int (*f)( int ) ) { const string S = c; return translate( S, f ); } 319 307 320 308 #ifndef _COMPILING_STRING_CFA_ -
libcfa/src/collections/string_res.hfa
ra514fed r5ad6f0d 10 10 // Created On : Fri Sep 03 11:00:00 2021 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 11 18:11:05202513 // Update Count : 7 712 // Last Modified On : Sun Apr 13 21:03:37 2025 13 // Update Count : 79 14 14 // 15 15 … … 148 148 _Istream_Rwidth wdi( unsigned int rwd, string_res & s ) { return (_Istream_Rwidth)@{ .s = &s, { {.scanset = 0p}, .wd = rwd, {.flags.rwd = true} } }; } 149 149 _Istream_Rstr getline( string_res & s, const char delimiter = '\n' ) { 150 // return (_Istream_Rstr)@{ { .s = &s, { {.delimiters = { delimiter, '\0' } }, .wd = -1, {.flags.delimiter = true} } } };151 150 return (_Istream_Rstr)@{ .s = &s, { {.delimiters = { delimiter, '\0' } }, .wd = -1, {.flags.delimiter = true} } }; 152 151 }
Note:
See TracChangeset
for help on using the changeset viewer.