Ignore:
Timestamp:
Jul 15, 2024, 10:39:51 PM (3 months ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
master
Children:
1dd5fd1
Parents:
a1a1f37d
Message:

commenting

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/enum.cfa

    ra1a1f37d rd796be70  
    4242        if ( eof( is ) ) throwResume ExceptionInst( missing_data );
    4343
    44         // Match input enumerator string to enumerator labels.
     44        // Match longest input enumerator string to enumerator labels, where enumerator names are unique.
     45
    4546        int N = Countof( e ), lnths[N], max = 0;
    4647//      printf( "N %d\n", N );
     
    6061        for ( c; max ) {
    6162                int args = fmt( is, "%c", &ch );                                // read character
    62                 if ( eof( is ) ) {
     63          if ( eof( is ) ) {
    6364//                      fprintf( stderr, "Eof1\n" );
    6465                        if ( c == 0 ) return is;                                        // no characters read ?
    65                         clear( is );                                                            // => reset EOF => detect again on next read
     66                        clear( is );                                                            // => read something => reset EOF => detect again on next read
    6667//                      fprintf( stderr, "Eof2\n" );
    67                         goto W;
    68                 }
     68                        break;
     69                } // if
    6970                if ( args != 1 ) throwResume ExceptionInst( missing_data );
     71
    7072//              printf( "read '%c'\n", ch );
    71                 for ( i; N ) {
     73                for ( i; N ) {                                                                  // scan enumeration strings for winner
    7274//                      printf( "%d %d %d\n", c, i, lnths[i] );
    7375                        if ( c < lnths[i] ) {                                           // eligible for this checking round ?
    7476                                char match = label( fromInt( i ) )[c];  // optimization
    7577//                              printf( "%c '%c'\n", match, ch );
     78                                // Stop on first match, could be other matches.
    7679                                if ( (match == ch) && (c == 0 || curr == label( fromInt( i ) )[c - 1]) ) {
    7780//                                      printf( "match %d %d %d '%c' '%c' '%c' '%c' 'c'\n", c, i, lnths[i], match, ch, prev, label( fromInt( i ) )[c - 1] );
     
    9295//              fprintf( stderr, "finished2 %d\n", win );
    9396        } // for
    94   W :;
    95         for ( i; N ) {                                                                          // scan for winner, must succeed
     97  W: ;
     98        for ( i; N ) {                                                                          // scan enumeration strings for winner
    9699                if ( win == lnths[i] - 1 ) {
    97100                        char match = label( fromInt( i ) )[win];        // optimization
     
    100103                                e = fromInt( i );
    101104                                break;
    102                         }
     105                        } // if
    103106                } // if
    104107        } else {
Note: See TracChangeset for help on using the changeset viewer.