Changeset 64eeb06


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

change basic_ostream to ostream, first attempt of enumeration input

Location:
libcfa/src
Files:
2 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    }
  • libcfa/src/enum.hfa

    r011c29e r64eeb06  
    88};
    99
    10 forall( E | Bounded(E) ) trait Serial {
     10forall( E | Bounded( E ) ) trait Serial {
    1111    unsigned fromInstance( E e );
    1212    E fromInt( unsigned i );
     
    1616
    1717// Design one
    18 forall( E, V | Serial(E) ) trait CfaEnum {
     18forall( E, V | Serial( E ) ) trait CfaEnum {
    1919    char * label( E e );
    2020    unsigned int posn( E e );
     
    2424// I/O
    2525
    26 forall( ostype & | basic_ostream(ostype), E, V | CfaEnum(E, V) ) {
     26forall( istype & | istream( istype ), E, V | CfaEnum( E, V ) )
     27istype & ?|?( istype &, E );
     28
     29forall( ostype & | ostream( ostype ), E, V | CfaEnum( E, V ) ) {
    2730        ostype & ?|?( ostype &, E );
    2831        OSTYPE_VOID( E );
    2932}
    3033
    31 forall( ostype & | basic_ostream(ostype), E | CfaEnum(E, quasi_void) )
    32 ostype & ?|?( ostype &, E );
     34forall( ostype & | ostream( ostype ), E | CfaEnum( E, quasi_void ) ) {
     35        ostype & ?|?( ostype &, E );
     36        OSTYPE_VOID( E );
     37}
    3338
    3439// Design two <- should go for this if we have change the cost model
    35 // forall(E | Serial(E)) trait CfaEnum {
    36 //     char * label(E e);
    37 //     unsigned int posn(E e);
     40// forall( E | Serial( E ) ) trait CfaEnum {
     41//     char * label( E e );
     42//     unsigned int posn( E e );
    3843// };
    3944
    40 // forall(E, V| CfaEnum(E)) trait TypedEnum {
    41 //     V value(E e);
     45// forall( E, V| CfaEnum( E)) trait TypedEnum {
     46//     V value( E e);
    4247// };
    4348
    44 forall( E, V | CfaEnum(E, V) ) {                                                // relational operators
    45     int ?==?(E, E);
    46     int ?!=?(E, E);
    47     int ?<?(E, E);
    48     int ?<=?(E, E);
    49     int ?>?(E, E);
    50     int ?>=?(E, E);
     49forall( E, V | CfaEnum( E, V ) ) {                                              // relational operators
     50    int ?==?( E, E );
     51    int ?!=?( E, E );
     52    int ?<?( E, E );
     53    int ?<=?( E, E );
     54    int ?>?( E, E );
     55    int ?>=?( E, E );
    5156
    52     int ++?(E&);
    53     int ?++(E&);
    54     int --?(E&);
    55     int ?--(E&);
     57    int ++?( E &);
     58    int ?++( E &);
     59    int --?( E &);
     60    int ?--( E &);
    5661}
Note: See TracChangeset for help on using the changeset viewer.