Ignore:
Timestamp:
Apr 10, 2025, 5:27:36 PM (9 months ago)
Author:
Michael Brooks <mlbrooks@…>
Branches:
master
Children:
234c432
Parents:
6174ecc (diff), bb506e0 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/collections/string.hfa

    r6174ecc rb1b513d  
    1010// Created On       : Fri Sep 03 11:00:00 2021
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Apr  5 15:16:23 2025
    13 // Update Count     : 180
     12// Last Modified On : Wed Apr  9 22:27:41 2025
     13// Update Count     : 259
    1414//
    1515
     
    1717
    1818#include <fstream.hfa>
    19 
    20 
    21 // in string_res.hfa
    22 struct string_res;
    23 struct charclass_res;
     19#include <string_res.hfa>
    2420
    2521struct string {
     
    2824
    2925// Getters
     26static inline size_t len( const string & s ) { return len( *s.inner ); }
    3027static inline size_t len( const char * cs ) { return strlen( cs ); };
    31 size_t len( const string & s );
    3228static inline size_t strlen( const string & s ) { return len( s ); }
    3329
     
    215211bool contains( const string & s, char ch );                             // single character
    216212
    217 int find( const string & s, char key );
    218 static inline int ?^? ( const string & s, char key ) { return find( s, key ); }
    219 int find( const string & s, const char * key );
    220 static inline int ?^? ( const string & s, const char * key ) { return find( s, key ); }
    221 int find( const string & s, const string & key );
    222 static inline int ?^? ( const string & s, const string & key ) { return find( s, key ); }
    223 int find( const string & s, const char * key, size_t keysize );
    224 
    225 int find( const string & s, size_t start, char key );
    226 int find( const string & s, size_t start, const string & key );
    227 int find( const string & s, size_t start, const char * key );
    228 int find( const string & s, size_t start, const char * key, size_t keysize );
     213//int find( const string & s, size_t start, size_t len, const string & key, size_t kstart, size_t klen );
     214size_t find$( const string_res & s, size_t start, size_t len, const string & key_res, size_t kstart, size_t klen );
     215
     216size_t find( const string & s, char key );
     217size_t find( const string & s, const char * key );
     218size_t find( const string & s, const string & key );
     219size_t find( const string & s, const char * key, size_t keysize );
     220
     221size_t find( const string & s, size_t start, char key );
     222size_t find( const string & s, size_t start, const string & key );
     223size_t find( const string & s, size_t start, const char * key );
     224size_t find( const string & s, size_t start, const char * key, size_t keysize );
     225static inline ?^?( const string & key, const string & s ) { return find( s, key ); }
     226static inline ?^?( const char * key, const string & s ) { return find( s, key ); }
    229227
    230228bool includes( const string & s, const string & mask );
     
    241239
    242240// Slicing
    243 string ?()( string & s, ssize_t start, ssize_t len );           // TODO const?
     241string ?()( string & s, ssize_t start, ssize_t len );
     242static inline string ?()( const string & s, ssize_t start, ssize_t len ) { string & w = (string &)s; return w( start, len ); } // FIX ME
    244243string ?()( string & s, ssize_t start );
     244static inline string ?()( const string & s, ssize_t start ) { string & w = (string &)s; return w( start ); } // FIX ME
    245245static inline string ?()( string & s, char m ) { return s( find( s, m ), 1 )`share; }
     246static inline string ?()( const string & s, char m ) { string & w = (string &)s; return w( find( s, m ), 1 )`share; } // FIX ME
    246247static inline string ?()( string & s, const char * m ) { return s( find( s, m ), len( m ) )`share; }
     248static inline string ?()( const string & s, const char * m ) { string & w = (string &)s; return w( find( s, m ), len( m ) )`share; } // FIX ME
    247249static inline string ?()( string & s, const string & m ) { return s( find( s, m ), len( m ) )`share; }
    248 
    249 // Modifiers
    250 void padStart( string & s, size_t n );
    251 void padStart( string & s, size_t n, char padding );
    252 void padEnd( string & s, size_t n );
    253 void padEnd( string & s, size_t n, char padding );
    254 
     250static inline string ?()( const string & s, const string & m ) { string & w = (string &)s; return w( find( s, m ), len( m ) )`share; } // FIX ME
    255251
    256252struct charclass {
     
    267263void ^?{}( charclass & );
    268264
    269 int include( const string & s, const charclass & mask );
    270 
    271 int exclude( const string & s, const charclass & mask );
    272 
    273 /*
    274 What to do with?
    275 StrRet include( string & s, const charclass & mask );
    276 StrRet exclude( string & s, const charclass & mask );
    277 */
     265size_t include( const string & s, const charclass & mask );
     266static inline size_t include( const char * s, const charclass & mask ) { string temp = s; return include( temp, mask ); }
     267static inline string include( const string & s, const charclass & mask ) { ssize_t i = include( s, mask ); return s( 0, i )`share; }
     268static inline string include( const char * s, const charclass & mask ) { string temp = s; ssize_t i = include( temp, mask ); return temp( 0, i ); }
     269
     270size_t exclude( const string & s, const charclass & mask );
     271static inline size_t exclude( const char * s, const charclass & mask ) { string temp = s; return exclude( temp, mask ); }
     272static inline string exclude( const string & s, const charclass & mask ) { ssize_t i = exclude( s, mask ); return s( 0, i )`share; }
     273static inline string exclude( const char * s, const charclass & mask ) { string temp = s; ssize_t i = exclude( temp, mask ); return temp( 0, i ); }
     274
     275size_t test( const string & s, int (*f)( int ) );
     276static inline size_t test( const char * c, int (*f)( int ) ) {
     277        const string S = c;
     278        return test( S, f );
     279}
     280
     281string replace( string & s, const string & from, const string & to );
     282static inline string replace( const char * s, const char * from, const char * to ) {
     283        string S = s, From = from, To = to;
     284        return replace( S, From, To );
     285}
     286static inline string replace( string & s, const char * from, const char * to ) {
     287        string From = from, To = to;
     288        return replace( s, From, To );
     289}
     290static inline string replace( string & s, const char * from, const string & to ) {
     291        string From = from;
     292        return replace( s, From, to );
     293}
     294static inline string replace( string & s, string & from, const char * to ) {
     295        string To = to;
     296        return replace( s, from, To );
     297}
     298
     299string translate( const string & s, int (*f)( int ) );
     300static inline string translate( const char * c, int (*f)( int ) ) {
     301        const string S = c;
     302        return translate( S, f );
     303}
Note: See TracChangeset for help on using the changeset viewer.