Ignore:
Timestamp:
Apr 6, 2025, 10:46:19 PM (9 months ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
master
Children:
0393fda8
Parents:
56ec508
Message:

fix substring error being outside of string, simplify comparison operations, start refactoring string search operations

File:
1 edited

Legend:

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

    r56ec508 red5023d1  
    1010// Created On       : Fri Sep 03 11:00:00 2021
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Apr  3 21:27:08 2025
    13 // Update Count     : 297
     12// Last Modified On : Sat Apr  5 15:18:30 2025
     13// Update Count     : 318
    1414//
    1515
     
    256256        if ( start < 0 ) { start += len( s ); }
    257257        if ( len < 0 ) { len = -len; start -= len; }
    258         if ( start > len( s ) ) return (string){ "" };
     258        if ( start >= len( s ) ) return (string){ "" };
    259259        if ( start + len > len( s ) ) len = len( s ) - start;
    260260        string ret = { *s.inner, start, len };
     
    424424}
    425425
    426 int find( const string & s, char search ) {
    427         return find( *s.inner, search );
    428 }
    429 
    430 int find( const string & s, const string & search ) {
    431         return find( *s.inner, *search.inner );
    432 }
    433 
    434 int find( const string & s, const char * search ) {
    435         return find( *s.inner, search );
    436 }
    437 
    438 int find( const string & s, const char * search, size_t searchsize ) {
    439         return find( *s.inner, search, searchsize );
    440 }
    441 
    442 int find( const string & s, size_t fromPos, char search ) {
    443         return findFrom( *s.inner, fromPos, search );
    444 }
    445 
    446 int find( const string & s, size_t fromPos, const string & search ) {
    447         return findFrom( *s.inner, fromPos, *search.inner );
    448 }
    449 
    450 int find( const string & s, size_t fromPos, const char * search ) {
    451         return findFrom( *s.inner, fromPos, search );
    452 }
    453 
    454 int find( const string & s, size_t fromPos, const char * search, size_t searchsize ) {
    455         return findFrom( *s.inner, fromPos, search, searchsize );
    456 }
    457 
    458 bool includes( const string & s, const string & search ) {
    459         return includes( *s.inner, *search.inner );
    460 }
    461 
    462 bool includes( const string & s, const char * search ) {
    463         return includes( *s.inner, search );
    464 }
    465 
    466 bool includes( const string & s, const char * search, size_t searchsize ) {
    467         return includes( *s.inner, search, searchsize );
     426int find( const string & s, size_t start, size_t len, const string & key, size_t kstart, size_t klen ) {
     427        if ( start < 0 ) { start += len( s ); }
     428        if ( len < 0 ) { len = -len; start -= len; }
     429        if ( start >= len( s ) ) return 0;
     430        if ( start + len > len( s ) ) len = len( s ) - start;
     431
     432        if ( kstart < 0 ) { kstart += len( key ); }
     433        if ( klen < 0 ) { klen = -klen; kstart -= klen; }
     434        if ( kstart >= len( key ) ) return 0;
     435        if ( kstart + klen > len( key ) ) klen = len( key ) - kstart;
     436       
     437        return findFrom( *s.inner, start, *key.inner );
     438}
     439
     440int find( const string & s, char key ) {
     441        return find( *s.inner, key );
     442}
     443
     444int find( const string & s, const string & key ) {
     445        return find( *s.inner, *key.inner );
     446}
     447
     448int find( const string & s, const char * key ) {
     449        return find( *s.inner, key );
     450}
     451
     452int find( const string & s, const char * key, size_t keysize ) {
     453        return find( *s.inner, key, keysize );
     454}
     455
     456int find( const string & s, size_t start, char key ) {
     457        return findFrom( *s.inner, start, key );
     458}
     459
     460int find( const string & s, size_t start, const char * key ) {
     461        return findFrom( *s.inner, start, key );
     462}
     463
     464int find( const string & s, size_t start, const char * key, size_t keysize ) {
     465        return findFrom( *s.inner, start, key, keysize );
     466}
     467
     468bool includes( const string & s, const string & mask ) {
     469        return includes( *s.inner, *mask.inner );
     470}
     471
     472bool includes( const string & s, const char * mask ) {
     473        return includes( *s.inner, mask );
     474}
     475
     476bool includes( const string & s, const char * mask, size_t masksize ) {
     477        return includes( *s.inner, mask, masksize );
    468478}
    469479
Note: See TracChangeset for help on using the changeset viewer.