Ignore:
Timestamp:
Sep 22, 2025, 2:33:42 PM (6 months ago)
Author:
Michael Brooks <mlbrooks@…>
Branches:
master, stuck-waitfor-destruct
Children:
bb5b866
Parents:
7ca6bf1 (diff), 295ed2d1 (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 remote-tracking branch 'refs/remotes/origin/master'

Location:
libcfa/src/collections
Files:
2 edited

Legend:

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

    r7ca6bf1 r1dec8f3  
    1010// Created On       : Fri Sep 03 11:00:00 2021
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Apr 13 07:58:55 2025
    13 // Update Count     : 390
     12// Last Modified On : Mon Sep 15 10:26:35 2025
     13// Update Count     : 394
    1414//
    1515
     
    9797}
    9898
    99 string str( ssize_t rhs ) {
    100         string s = rhs;
    101         return s;
    102 }
    103 
    104 string str( size_t rhs ) {
    105         string s = rhs;
    106         return s;
    107 }
    108 
    109 string str( double rhs ) {
    110         string s = rhs;
    111         return s;
    112 }
    113 
    114 string str( long double rhs ) {
    115         string s = rhs;
    116         return s;
    117 }
    118 
    119 string str( double _Complex rhs ) {
    120         string s = rhs;
    121         return s;
    122 }
    123 
    124 string str( long double _Complex rhs ) {
    125         string s = rhs;
    126         return s;
    127 }
    128 
    12999void ^?{}( string & s ) {
    130100        ^(*s.inner){};
     
    204174
    205175////////////////////////////////////////////////////////
    206 // Getter
     176// C-style
     177
     178// safe conversion from string to char *
     179char * strncpy( char * dst, string & src, size_t n ) {
     180        size_t l = min( n - 1, len( src ) );                            // ensure null terminated
     181        for ( i; l ) dst[i] = src[i];
     182        dst[l] = '\0';
     183        return dst;
     184}
     185char * ?=?( char *& dst, string & src ) {
     186        dst = aalloc( len( src ) + 1 );                                 // ensure null terminated
     187        for ( i; len( src ) ) dst[i] = src[i];
     188        dst[len(src)] = '\0';
     189        return dst;
     190}
     191void ?{}( char *& dst, string & src ) {
     192        dst = aalloc( len( src ) + 1 );                                 // ensure null terminated
     193        for ( i; len( src ) ) dst[i] = src[i];
     194        dst[len(src)] = '\0';
     195}
    207196
    208197size_t strnlen( const string & s, size_t maxlen ) { return min( len( s ), maxlen ); }
     
    255244
    256245string ?()( string & s, ssize_t start, ssize_t len ) {
    257         if ( start < 0 ) { start += len( s ); }
    258         if ( len < 0 ) { len = -len; start -= len; }
    259         if ( start >= len( s ) ) return (string){ "" };
     246        if ( start < 0 ) start += len( s );
     247        if ( len < 0 ) { len = -len; start -= len - 1; }
     248        if ( start < 0 || start >= len( s ) ) return (string){ "" };
    260249        if ( start + len > len( s ) ) len = len( s ) - start;
    261250        string ret = { *s.inner, start, len };
  • libcfa/src/collections/string.hfa

    r7ca6bf1 r1dec8f3  
    1010// Created On       : Fri Sep 03 11:00:00 2021
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Apr 13 21:03:35 2025
    13 // Update Count     : 284
     12// Last Modified On : Sun Sep 14 10:58:28 2025
     13// Update Count     : 311
    1414//
    1515
     
    4343void ?{}( string & s, long double _Complex rhs );
    4444static inline void ?{}( string & s, int rhs ) { (s){(signed long int) rhs}; }
    45 
    46 // string str( ssize_t rhs );
    47 // string str( size_t rhs );
    48 // string str( double rhs );
    49 // string str( long double rhs );
    50 // string str( double _Complex rhs );
    51 // string str( long double _Complex rhs );
    5245
    5346PBOOST string & ?=?( string & s, string c );
     
    6861static inline string & strcpy( string & s, const string & c ) { s = c; return s; }
    6962static inline string & strncpy( string & s, const string & c, size_t n ) { assign( s, c, n ); return s; }
     63char * strncpy( char * dst, string & src, size_t n );
     64char * ?=?( char *& dst, string & src );
     65void ?{}( char *& dst, string & src );
    7066
    7167// Alternate construction: request shared edits
     
    187183PBOOST string ?*?( string s, strmul_factor_t factor );
    188184string ?*?( const char * s, strmul_factor_t factor );
    189 static inline string ?*?( strmul_factor_t factor, char s ) { return s * factor; }
     185static inline string ?*?( strmul_factor_t factor, char c ) { return c * factor; }
    190186PBOOST static inline string ?*?( strmul_factor_t factor, string s ) { return s * factor; }
    191187static inline string ?*?( strmul_factor_t factor, const char * s ) { return s * factor; }
     
    278274
    279275size_t include( const string & s, const charclass & mask );
    280 static inline size_t include( const char * cs, const charclass & mask ) { const string s = cs; return include( s, mask ); }
     276static inline size_t include( const string & s, const char * mask ) { return include( s, (charclass){ mask } ); }
     277static inline size_t include( const string & s, const string & mask ) { return include( s, (charclass){ mask } ); }
     278static inline size_t include( const char * cs, const charclass & mask ) { return include( (string){ cs }, mask ); }
     279static inline size_t include( const char * cs, const char * mask ) { return include( (string){ cs }, (charclass){ mask } ); }
     280static inline size_t include( const char * cs, const string & mask ) { return include( (string){ cs }, (charclass){ mask } ); }
     281
    281282static inline string include( const string & s, const charclass & mask ) { return s( 0, include( s, mask ) ); }
     283static inline string include( const string & s, const char * mask ) { return s( 0, include( s, (charclass){ mask } ) ); }
     284static inline string include( const string & s, const string & mask ) { return s( 0, include( s, (charclass){ mask } ) ); }
    282285static inline string include( const char * cs, const charclass & mask ) { const string s = cs; return s( 0, include( s, mask ) ); }
     286static inline string include( const char * cs, const char * mask ) { const string s = cs; return s( 0, include( s, (charclass){ mask } ) ); }
     287static inline string include( const char * cs, const string & mask ) { const string s = cs; return s( 0, include( s, (charclass){ mask } ) ); }
    283288
    284289size_t exclude( const string & s, const charclass & mask );
    285 static inline size_t exclude( const char * cs, const charclass & mask ) { const string s = cs; return exclude( s, mask ); }
     290static inline size_t exclude( const string & s, const char * mask ) { return exclude( s, (charclass){ mask } ); }
     291static inline size_t exclude( const string & s, const string & mask ) { return exclude( s, (charclass){ mask } ); }
     292static inline size_t exclude( const char * cs, const charclass & mask ) { return exclude( (string){ cs }, mask ); }
     293static inline size_t exclude( const char * cs, const string & mask ) { return exclude( (string){ cs }, (charclass){ mask } ); }
     294static inline size_t exclude( const char * cs, const char * mask ) { return exclude( (string){ cs }, (charclass){ mask } ); }
     295
    286296static inline string exclude( const string & s, const charclass & mask ) { return s( 0, exclude( s, mask ) ); }
     297static inline string exclude( const string & s, const char * mask ) { return s( 0, exclude( s, (charclass){ mask } ) ); }
     298static inline string exclude( const string & s, const string & mask ) { return s( 0, exclude( s, (charclass){ mask } ) ); }
    287299static 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 ) ); }
     300static inline string exclude( const char * cs, const string & mask ) { const string s = cs; return s( 0, exclude( s, (charclass){ mask } ) ); }
     301static inline string exclude( const char * cs, const char * mask ) { const string s = cs; return s( 0, exclude( s, (charclass){ mask } ) ); }
     302
     303size_t include( const string & s, int (* f)( int ) );   // for C character-class functions, e.g., isdigit
     304static inline size_t include( const char * cs, int (* f)( int ) ) { return include( (string){ cs }, f ); }
     305static inline string include( const string & s, int (* f)( int ) ) { return s( 0, include( s, f ) ); }
     306static inline string include( const char * cs, int (* f)( int ) ) { const string s = cs; return s( 0, include( s, f ) ); }
     307
     308static inline size_t include( const string & s, bool (* f)( char ) ) { return include( s, (int (*)( int ))f ); }
     309static inline size_t include( const char * cs, bool (* f)( char ) ) { return include( (string){ cs }, f ); }
     310static inline string include( const string & s, bool (* f)( char ) ) { return s( 0, include( s, f ) ); }
     311static inline string include( const char * cs, bool (* f)( char ) ) { const string s = cs; return s( 0, include( s, f ) ); }
     312
     313size_t exclude( const string & s, int (* f)( int ) );   // for C character-class functions, e.g., isdigit
     314static inline size_t exclude( const char * cs, int (* f)( int ) ) { return exclude( (string){ cs }, f ); }
     315static inline string exclude( const string & s, int (* f)( int ) ) { return s( 0, exclude( s, f ) ); }
     316static inline string exclude( const char * cs, int (* f)( int ) ) { const string s = cs; return s( 0, exclude( s, f ) ); }
     317
     318static inline size_t exclude( const string & s, bool (* f)( char ) ) { return exclude( s, (int (*)( int ))f ); }
     319static inline size_t exclude( const char * cs, bool (* f)( char ) ) { return exclude( (string){ cs }, f ); }
     320static inline string exclude( const string & s, bool (* f)( char ) ) { return s( 0, exclude( s, f ) ); }
     321static inline string exclude( const char * cs, bool (* f)( char ) ) { const string s = cs; return s( 0, exclude( s, f ) ); }
    298322
    299323string 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 ); }
    304 
    305 string translate( const string & s, int (*f)( int ) );
    306 static inline string translate( const char * c, int (*f)( int ) ) { const string S = c; return translate( S, f ); }
     324static inline string replace( const char * s, const char * from, const char * to ) { return replace( (string){ s }, (string){ from }, (string){ to } ); }
     325static inline string replace( const string & s, const char * from, const char * to ) { return replace( s, (string){ from }, (string){ to } ); }
     326static inline string replace( const string & s, const char * from, const string & to ) { return replace( s, (string){ from }, to ); }
     327static inline string replace( const string & s, string & from, const char * to ) { return replace( s, from, (string){ to } ); }
     328
     329string translate( const string & s, int (* f)( int ) ); // for C character-class functions, e.g., isdigit
     330static inline string translate( const char * cs, int (* f)( int ) ) { return translate( (string){ cs }, f ); }
     331
     332static inline string translate( const string & s, bool (* f)( char ) ) { return translate( s, (int (*)( int ))f ); }
     333static inline string translate( const char * cs, bool (* f)( char ) ) { return translate( (string){ cs }, f ); }
    307334
    308335#ifndef _COMPILING_STRING_CFA_
Note: See TracChangeset for help on using the changeset viewer.