Ignore:
Timestamp:
Jul 2, 2024, 2:27:57 PM (5 days ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
master
Children:
72abc90a
Parents:
011c29e
Message:

change basic_ostream to ostream, first attempt of enumeration input

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/enum.cfa

    r011c29e r64eeb06  
    44#pragma GCC visibility push(default)
    55
    6 forall( ostype & | basic_ostream(ostype), E, V | CfaEnum(E, V) ) {
    7         ostype & ?|?( ostype& os, E e ) {
     6forall( istype & | istream( istype ), E, V | CfaEnum( E, V ) )
     7istype & ?|?( istype & is, E & e ) {
     8        if ( eof( is ) ) throwResume ExceptionInst( missing_data );
     9        char val[256];
     10        int args = fmt( is, "%255s", val );
     11        if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
     12        for ( s; E ) {
     13                if ( val == label( s ) ) { e = s; break; }
     14        } else {
     15                fprintf( stderr, "invalid enumeration constant\n" );
     16                abort();                                                                        // cannot use abort stream
     17        } // for
     18        return is;
     19}
     20
     21forall( ostype & | ostream( ostype ), E, V | CfaEnum( E, V ) ) {
     22        ostype & ?|?( ostype & os, E e ) {
    823                return os | label( e );
    924        }
     
    1126}
    1227
    13 forall( ostype & | basic_ostream(ostype), E | CfaEnum(E, quasi_void) )
    14 ostype & ?|?( ostype & os, E e ) {
    15     return os | label( e );
     28forall( ostype & | ostream( ostype ), E | CfaEnum( E, quasi_void ) ) {
     29        ostype & ?|?( ostype & os, E e ) {
     30                return os | label( e );
     31        }
     32        OSTYPE_VOID_IMPL( E )
    1633}
    1734
    18 forall( E, V | CfaEnum(E, V) ) {                                                // relational operators
    19     int ?==?(E l, E r) { return posn(l) == posn(r); }
    20     int ?!=?(E l, E r) { return posn(l) != posn(r); }
    21     int ?<?(E l, E r) { return posn(l) < posn(r); }
    22     int ?<=?(E l, E r) { return posn(l) <= posn(r); }
    23     int ?>?(E l, E r) { return posn(l) > posn(r); }
    24     int ?>=?(E l, E r) { return posn(l) >= posn(r); }
     35forall( E, V | CfaEnum( E, V ) ) {                                              // relational operators
     36    int ?==?( E l, E r ) { return posn( l ) == posn( r ); }
     37    int ?!=?( E l, E r ) { return posn( l ) != posn( r ); }
     38    int ?<?( E l, E r ) { return posn( l ) < posn( r ); }
     39    int ?<=?( E l, E r ) { return posn( l ) <= posn( r ); }
     40    int ?>?( E l, E r ) { return posn( l ) > posn( r ); }
     41    int ?>=?( E l, E r ) { return posn( l ) >= posn( r ); }
    2542
    26     E ++?(E& l) {
    27         l = succ(l);
     43    E ++?( E & l ) {
     44        l = succ( l );
    2845        return l;
    2946    }
    3047   
    31     E ?++(E& l) {
     48    E ?++( E & l ) {
    3249        E ret = l;
    33         l = succ(l);
     50        l = succ( l );
    3451        return ret;
    3552    }
    3653
    37     E --?(E& l) {
    38         l = pred(l);
     54    E --?( E & l ) {
     55        l = pred( l );
    3956        return l;
    4057    }
    4158
    42     E ?--(E& l) {
     59    E ?--( E & l ) {
    4360        E ret = l;
    44         l = pred(l);
     61        l = pred( l );
    4562        return ret;
    4663    }
Note: See TracChangeset for help on using the changeset viewer.