Changeset 4223317


Ignore:
Timestamp:
Apr 1, 2025, 9:19:26 AM (6 months ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
master
Children:
f8913b7c
Parents:
3181a33
Message:

test some string operation changes

Location:
libcfa/src/collections
Files:
2 edited

Legend:

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

    r3181a33 r4223317  
    1010// Created On       : Fri Sep 03 11:00:00 2021
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Mar 14 15:41:33 2025
    13 // Update Count     : 275
     12// Last Modified On : Tue Apr  1 09:17:34 2025
     13// Update Count     : 288
    1414//
    1515
     
    3131// private (not in header)
    3232static void ?{}( string & s, string_res & src, size_t start, size_t len ) {
    33     (s.inner) { malloc() };
    34     ?{}( *s.inner, src, SHARE_EDITS, start, len );
     33        (s.inner) { malloc() };
     34        ?{}( *s.inner, src, SHARE_EDITS, start, len );
    3535}
    3636
    3737void ?{}( string & s ) {
    38     (s.inner) { malloc() };
    39     ?{}( *s.inner );
     38        (s.inner) { malloc() };
     39        ?{}( *s.inner );
    4040}
    4141
    4242void ?{}( string & s, const string & c ) {
    43     (s.inner) { malloc() };
    44     ?{}( *s.inner, *c.inner, COPY_VALUE );
     43        (s.inner) { malloc() };
     44        ?{}( *s.inner, *c.inner, COPY_VALUE );
    4545}
    4646
    4747void ?{}( string & s, const string & s2, size_t maxlen ) {
    48     (s.inner) { malloc() };
    49     ?{}( *s.inner, *s2.inner, COPY_VALUE, maxlen );
     48        (s.inner) { malloc() };
     49        ?{}( *s.inner, *s2.inner, COPY_VALUE, maxlen );
    5050}
    5151
    5252
    5353void ?{}( string & s, string & c ) {
    54     ?{}( s, (const string &) c );
     54        ?{}( s, (const string &) c );
    5555}
    5656
    5757void ?{}( string & s, const char c ) {
    58     (s.inner) { malloc() };
    59     ?{}( *s.inner, c );
     58        (s.inner) { malloc() };
     59        ?{}( *s.inner, c );
    6060}
    6161
    6262void ?{}( string & s, const char * c ) {
    63     (s.inner) { malloc() };
    64     ?{}( *s.inner, c );
     63        (s.inner) { malloc() };
     64        ?{}( *s.inner, c );
    6565}
    6666
    6767void ?{}( string & s, const char * c, size_t size ) {
    68     (s.inner) { malloc() };
    69     ?{}( *s.inner, c, size );
     68        (s.inner) { malloc() };
     69        ?{}( *s.inner, c, size );
    7070}
    7171
    7272void ?{}( string & s, ssize_t rhs ) {
    73     (s.inner) { malloc() };
    74     ?{}( *s.inner, rhs );
     73        (s.inner) { malloc() };
     74        ?{}( *s.inner, rhs );
    7575}
    7676
    7777void ?{}( string & s, size_t rhs ) {
    78     (s.inner) { malloc() };
    79     ?{}( *s.inner, rhs );
     78        (s.inner) { malloc() };
     79        ?{}( *s.inner, rhs );
    8080}
    8181
    8282void ?{}( string & s, double rhs ) {
    83     (s.inner) { malloc() };
    84     ?{}( *s.inner, rhs );
     83        (s.inner) { malloc() };
     84        ?{}( *s.inner, rhs );
    8585}
    8686
    8787void ?{}( string & s, long double rhs ) {
    88     (s.inner) { malloc() };
    89     ?{}( *s.inner, rhs );
     88        (s.inner) { malloc() };
     89        ?{}( *s.inner, rhs );
    9090}
    9191
    9292void ?{}( string & s, double _Complex rhs ) {
    93     (s.inner) { malloc() };
    94     ?{}( *s.inner, rhs );
     93        (s.inner) { malloc() };
     94        ?{}( *s.inner, rhs );
    9595}
    9696
    9797void ?{}( string & s, long double _Complex rhs ) {
    98     (s.inner) { malloc() };
    99     ?{}( *s.inner, rhs );
     98        (s.inner) { malloc() };
     99        ?{}( *s.inner, rhs );
    100100}
    101101
     
    131131
    132132void ^?{}( string & s ) {
    133     ^(*s.inner){};
    134     free( s.inner );
    135     s.inner = 0p;
     133        ^(*s.inner){};
     134        free( s.inner );
     135        s.inner = 0p;
    136136}
    137137
     
    140140
    141141string_Share ?`share( string & s ) {
    142     string_Share ret = { &s };
    143     return ret;
     142        string_Share ret = { &s };
     143        return ret;
    144144}
    145145
    146146void ?{}( string & s, string_Share src ) {
    147     ?{}( s, *src.s->inner, 0, src.s->inner->Handle.lnth );
     147        ?{}( s, *src.s->inner, 0, src.s->inner->Handle.lnth );
    148148}
    149149
     
    152152
    153153string & ?=?( string & s, const string & c ) {
    154     (*s.inner) = (*c.inner);
    155     return s;
     154        (*s.inner) = (*c.inner);
     155        return s;
    156156}
    157157
    158158string & ?=?( string & s, string & c ) {
    159     (*s.inner) = (*c.inner);
    160     return s;
     159        (*s.inner) = (*c.inner);
     160        return s;
    161161}
    162162
    163163string & ?=?( string & s, const char * val ) {
    164     (*s.inner) = val;
    165     return s;
     164        (*s.inner) = val;
     165        return s;
    166166}
    167167
    168168string & ?=?( string & s, char val ) {
    169     (*s.inner) = val;
    170     return s;
     169        (*s.inner) = val;
     170        return s;
    171171}
    172172
    173173string & assign( string & s, const string & c, size_t n ) {
    174     assign( *s.inner, *c.inner, n );
    175     return s;
     174        assign( *s.inner, *c.inner, n );
     175        return s;
    176176}
    177177
    178178string & assign( string & s, const char * c, size_t n ) {
    179     assign( *s.inner, c, n );
    180     return s;
     179        assign( *s.inner, c, n );
     180        return s;
    181181}
    182182
    183183string & ?=?( string & s, ssize_t rhs ) {
    184     (*s.inner) = rhs;
    185     return s;
     184        (*s.inner) = rhs;
     185        return s;
    186186}
    187187
    188188string & ?=?( string & s, size_t rhs ) {
    189     (*s.inner) = rhs;
    190     return s;
     189        (*s.inner) = rhs;
     190        return s;
    191191}
    192192
    193193string & ?=?( string & s, double rhs ) {
    194     (*s.inner) = rhs;
    195     return s;
     194        (*s.inner) = rhs;
     195        return s;
    196196}
    197197
    198198string & ?=?( string & s, long double rhs ) {
    199     (*s.inner) = rhs;
    200     return s;
     199        (*s.inner) = rhs;
     200        return s;
    201201}
    202202
    203203string & ?=?( string & s, double _Complex rhs ) {
    204     (*s.inner) = rhs;
    205     return s;
     204        (*s.inner) = rhs;
     205        return s;
    206206}
    207207
    208208string & ?=?( string & s, long double _Complex rhs ) {
    209     (*s.inner) = rhs;
    210     return s;
     209        (*s.inner) = rhs;
     210        return s;
    211211}
    212212
     
    215215
    216216ofstream & ?|?( ofstream & out, const string & s ) {
    217     return out | (*s.inner); // print internal string_res
     217        return out | (*s.inner); // print internal string_res
    218218}
    219219
    220220void ?|?( ofstream & out, const string & s ) {
    221     (ofstream &)(out | (*s.inner)); ends( out );
     221        (ofstream &)(out | (*s.inner)); ends( out );
    222222}
    223223
     
    236236
    237237ifstream & ?|?( ifstream & in, string & s ) {
    238     return in | (*s.inner); // read to internal string_res
     238        return in | (*s.inner); // read to internal string_res
    239239}
    240240
    241241ifstream & ?|?( ifstream & is, _Istream_Squoted f ) {
    242242        _Istream_Rquoted f2 = { { f.sstr.s.inner, (_Istream_str_base)f.sstr } };
    243     return is | f2;
     243        return is | f2;
    244244} // ?|?
    245245
     
    247247//      _Istream_Rstr f2 = {f.sstr.s.inner, (_Istream_str_base)f.sstr};
    248248        _Istream_Rstr f2 = {f.s.inner, (_Istream_str_base)f};
    249     return is | f2;
     249        return is | f2;
    250250} // ?|?
    251251
     
    253253// Slicing
    254254
    255 string ?()( string & s, size_t start, size_t len ) {
    256     string ret = { *s.inner, start, len };
    257     return ret`share;
    258 }
    259 
    260 string ?()( string & s, size_t start ) {
    261     string ret = { *s.inner, start, size( s ) - start };
    262     return ret`share;
     255string ?()( string & s, ssize_t start, ssize_t len ) {
     256        if ( start < 0 ) { start += s`len; }
     257        if ( len < 0 ) { len = -len; start -= len; }
     258        if ( start > s`len ) return (string){ "" };
     259        if ( start + len > s`len ) len = s`len - start;
     260        string ret = { *s.inner, start, len };
     261        return ret`share;
     262}
     263
     264string ?()( string & s, ssize_t start ) {
     265        if ( start < 0 ) { start += s`len; }
     266        string ret = { *s.inner, start, size( s ) - start };
     267        return ret`share;
    263268}
    264269
     
    295300
    296301size_t size( const string & s ) {
    297     return size( *s.inner );
     302        return size( *s.inner );
    298303}
    299304
     
    302307
    303308void ?+=?( string & s, char c ) {
    304     (*s.inner) += c;
     309        (*s.inner) += c;
    305310}
    306311
    307312void ?+=?( string & s, const string & s2 ) {
    308     (*s.inner) += (*s2.inner);
     313        (*s.inner) += (*s2.inner);
    309314}
    310315
    311316void append( string & s, const string & s2, size_t maxlen ) {
    312     append( (*s.inner), (*s2.inner), maxlen );
     317        append( (*s.inner), (*s2.inner), maxlen );
    313318}
    314319
    315320void ?+=?( string & s, const char * c ) {
    316     (*s.inner) += c;
     321        (*s.inner) += c;
    317322}
    318323
    319324void append( string & s, const char * buffer, size_t bsize ) {
    320     append( (*s.inner), buffer, bsize );
     325        append( (*s.inner), buffer, bsize );
    321326}
    322327
    323328string ?+?( const string & s, char c ) {
    324     string ret = s;
    325     ret += c;
    326     return ret;
     329        string ret = s;
     330        ret += c;
     331        return ret;
    327332}
    328333
    329334string ?+?( char c, const string & s ) {
    330     string ret = s;
    331     ret += c;
    332     return ret;
     335        string ret = s;
     336        ret += c;
     337        return ret;
    333338}
    334339
    335340string ?+?( const string & s, const string & s2 ) {
    336     string ret = s;
    337     ret += s2;
    338     return ret;
     341        string ret = s;
     342        ret += s2;
     343        return ret;
    339344}
    340345
    341346string ?+?( const char * s,  char c ) {
    342     string ret = s;
    343     ret += c;
    344     return ret;
     347        string ret = s;
     348        ret += c;
     349        return ret;
    345350}
    346351
    347352string ?+?( char c, const char * s ) {
    348     string ret = c;
    349     ret += s;
    350     return ret;
     353        string ret = c;
     354        ret += s;
     355        return ret;
    351356}
    352357
    353358string ?+?( const char * s1, const char * s2 ) {
    354     string ret = s1;
    355     ret += s2;
    356     return ret;
     359        string ret = s1;
     360        ret += s2;
     361        return ret;
    357362}
    358363
    359364string ?+?( const char * s1, string & s2 ) {
    360     string ret = s1;
    361     ret += s2;
    362     return ret;
     365        string ret = s1;
     366        ret += s2;
     367        return ret;
    363368}
    364369
    365370string ?+?( const string & s, const char * c ) {
    366     string ret = s;
    367     ret += c;
    368     return ret;
     371        string ret = s;
     372        ret += c;
     373        return ret;
    369374}
    370375
     
    373378
    374379void ?*=?( string & s, size_t factor ) {
    375     (*s.inner) *= factor;
     380        (*s.inner) *= factor;
    376381}
    377382
    378383string ?*?( const string & s, size_t factor ) {
    379     string ret = s;
    380     ret *= factor;
    381     return ret;
     384        string ret = s;
     385        ret *= factor;
     386        return ret;
    382387}
    383388
    384389string ?*?( char c, size_t factor ) {
    385     string ret = c;
    386     ret *= factor;
    387     return ret;
     390        string ret = c;
     391        ret *= factor;
     392        return ret;
    388393}
    389394
    390395string ?*?( const char * s, size_t factor ) {
    391     string ret = s;
    392     ret *= factor;
    393     return ret;
     396        string ret = s;
     397        ret *= factor;
     398        return ret;
    394399}
    395400
     
    398403
    399404char ?[?]( const string & s, size_t index ) {
    400     return (*s.inner)[index];
     405        return (*s.inner)[index];
    401406}
    402407
    403408string ?[?]( string & s, size_t index ) {
    404     string ret = { *s.inner, index, 1 };
    405     return ret`share;
     409        string ret = { *s.inner, index, 1 };
     410        return ret`share;
    406411}
    407412
     
    410415
    411416bool contains( const string & s, char ch ) {
    412     return contains( *s.inner, ch );
     417        return contains( *s.inner, ch );
    413418}
    414419
    415420int find( const string & s, char search ) {
    416     return find( *s.inner, search );
     421        return find( *s.inner, search );
    417422}
    418423
    419424int find( const string & s, const string & search ) {
    420     return find( *s.inner, *search.inner );
     425        return find( *s.inner, *search.inner );
    421426}
    422427
    423428int find( const string & s, const char * search ) {
    424     return find( *s.inner, search );
     429        return find( *s.inner, search );
    425430}
    426431
    427432int find( const string & s, const char * search, size_t searchsize ) {
    428     return find( *s.inner, search, searchsize );
    429 }
    430 
    431 int findFrom( const string & s, size_t fromPos, char search ) {
    432     return findFrom( *s.inner, fromPos, search );
    433 }
    434 
    435 int findFrom( const string & s, size_t fromPos, const string & search ) {
    436     return findFrom( *s.inner, fromPos, *search.inner );
    437 }
    438 
    439 int findFrom( const string & s, size_t fromPos, const char * search ) {
    440     return findFrom( *s.inner, fromPos, search );
    441 }
    442 
    443 int findFrom( const string & s, size_t fromPos, const char * search, size_t searchsize ) {
    444     return findFrom( *s.inner, fromPos, search, searchsize );
     433        return find( *s.inner, search, searchsize );
     434}
     435
     436int find( const string & s, size_t fromPos, char search ) {
     437        return findFrom( *s.inner, fromPos, search );
     438}
     439
     440int find( const string & s, size_t fromPos, const string & search ) {
     441        return findFrom( *s.inner, fromPos, *search.inner );
     442}
     443
     444int find( const string & s, size_t fromPos, const char * search ) {
     445        return findFrom( *s.inner, fromPos, search );
     446}
     447
     448int find( const string & s, size_t fromPos, const char * search, size_t searchsize ) {
     449        return findFrom( *s.inner, fromPos, search, searchsize );
    445450}
    446451
    447452bool includes( const string & s, const string & search ) {
    448     return includes( *s.inner, *search.inner );
     453        return includes( *s.inner, *search.inner );
    449454}
    450455
    451456bool includes( const string & s, const char * search ) {
    452     return includes( *s.inner, search );
     457        return includes( *s.inner, search );
    453458}
    454459
    455460bool includes( const string & s, const char * search, size_t searchsize ) {
    456     return includes( *s.inner, search, searchsize );
     461        return includes( *s.inner, search, searchsize );
    457462}
    458463
    459464bool startsWith( const string & s, const string & prefix ) {
    460     return startsWith( *s.inner, *prefix.inner );
     465        return startsWith( *s.inner, *prefix.inner );
    461466}
    462467
    463468bool startsWith( const string & s, const char * prefix ) {
    464     return startsWith( *s.inner, prefix );
     469        return startsWith( *s.inner, prefix );
    465470}
    466471
    467472bool startsWith( const string & s, const char * prefix, size_t prefixsize ) {
    468     return startsWith( *s.inner, prefix, prefixsize );
     473        return startsWith( *s.inner, prefix, prefixsize );
    469474}
    470475
    471476bool endsWith( const string & s, const string & suffix ) {
    472     return endsWith( *s.inner, *suffix.inner );
     477        return endsWith( *s.inner, *suffix.inner );
    473478}
    474479
    475480bool endsWith( const string & s, const char * suffix ) {
    476     return endsWith( *s.inner, suffix );
     481        return endsWith( *s.inner, suffix );
    477482}
    478483
    479484bool endsWith( const string & s, const char * suffix, size_t suffixsize ) {
    480     return endsWith( *s.inner, suffix, suffixsize );
     485        return endsWith( *s.inner, suffix, suffixsize );
    481486}
    482487
     
    486491
    487492void ?{}( charclass & s, const string & chars ) {
    488     (s.inner) { malloc() };
    489     ?{}( *s.inner, *(const string_res *)chars.inner );
     493        (s.inner) { malloc() };
     494        ?{}( *s.inner, *(const string_res *)chars.inner );
    490495}
    491496
    492497void ?{}( charclass & s, const char * chars ) {
    493     (s.inner) { malloc() };
    494     ?{}( *s.inner, chars );
     498        (s.inner) { malloc() };
     499        ?{}( *s.inner, chars );
    495500}
    496501
    497502void ?{}( charclass & s, const char * chars, size_t charssize ) {
    498     (s.inner) { malloc() };
    499     ?{}( *s.inner, chars, charssize );
     503        (s.inner) { malloc() };
     504        ?{}( *s.inner, chars, charssize );
    500505}
    501506
    502507void ^?{}( charclass & s ) {
    503     ^(*s.inner){};
    504     free( s.inner );
    505     s.inner = 0p;
     508        ^(*s.inner){};
     509        free( s.inner );
     510        s.inner = 0p;
    506511}
    507512
    508513
    509514int exclude( const string & s, const charclass & mask ) {
    510     return exclude( *s.inner, *mask.inner );
     515        return exclude( *s.inner, *mask.inner );
    511516}
    512517/*
     
    516521
    517522int include( const string & s, const charclass & mask ) {
    518     return include( *s.inner, *mask.inner );
     523        return include( *s.inner, *mask.inner );
    519524}
    520525
  • libcfa/src/collections/string.hfa

    r3181a33 r4223317  
    1010// Created On       : Fri Sep 03 11:00:00 2021
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Mar 14 15:33:38 2025
    13 // Update Count     : 132
     12// Last Modified On : Tue Apr  1 09:16:39 2025
     13// Update Count     : 155
    1414//
    1515
     
    2424
    2525struct string {
    26     string_res * inner;
     26        string_res * inner;
    2727};
    2828
    2929// Getters
     30//static size_t inline __attribute__((always_inline)) size( char c ) { return sizeof( c ); };   // base case
     31//static size_t inline __attribute__((always_inline)) size( wchar_t wc ) { return sizeof( wc ); }; // base case
     32static inline size_t size( const char * cs ) { return strlen( cs ); };
     33static inline size_t ?`len( const char * cs ) { return size( cs ); };
    3034size_t size( const string & s );
     35size_t ?`len( const string & s ) { return size( s ); }
    3136static inline size_t strlen( const string & s ) { return size( s ); }
    3237
    3338// RAII, assignment
    34 void ?{}( string & s ); // empty string
     39void ?{}( string & s );                                                                 // empty string
    3540void ?{}( string & s, const string & s2 );
    3641void ?{}( string & s, const string & s2, size_t maxlen );
     
    4853void ?{}( string & s, long double _Complex rhs );
    4954
    50 string str( ssize_t rhs );
    51 string str( size_t rhs );
    52 string str( double rhs );
    53 string str( long double rhs );
    54 string str( double _Complex rhs );
    55 string str( long double _Complex rhs );
     55// string str( ssize_t rhs );
     56// string str( size_t rhs );
     57// string str( double rhs );
     58// string str( long double rhs );
     59// string str( double _Complex rhs );
     60// string str( long double _Complex rhs );
    5661
    5762string & ?=?( string & s, const string & c );
     
    7883// Alternate construction: request shared edits
    7984struct string_Share {
    80     string * s;
     85        string * s;
    8186};
    8287string_Share ?`share( string & s );
     
    210215
    211216// Slicing
    212 string ?()( string & s, size_t start, size_t len );             // TODO const?
    213 string ?()( string & s, size_t start );
     217string ?()( string & s, ssize_t start, ssize_t len );           // TODO const?
     218string ?()( string & s, ssize_t start );
    214219
    215220// String search
     
    221226int find( const string & s, const char * search, size_t searchsize );
    222227
    223 int findFrom( const string & s, size_t fromPos, char search );
    224 int findFrom( const string & s, size_t fromPos, const string & search );
    225 int findFrom( const string & s, size_t fromPos, const char * search );
    226 int findFrom( const string & s, size_t fromPos, const char * search, size_t searchsize );
     228int find( const string & s, size_t fromPos, char search );
     229int find( const string & s, size_t fromPos, const string & search );
     230int find( const string & s, size_t fromPos, const char * search );
     231int find( const string & s, size_t fromPos, const char * search, size_t searchsize );
    227232
    228233bool includes( const string & s, const string & search );
     
    246251
    247252struct charclass {
    248     charclass_res * inner;
     253        charclass_res * inner;
    249254};
    250255
Note: See TracChangeset for help on using the changeset viewer.