Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/containers/list.hfa

    r1fd3d85 r8a97248  
    3232static inline tytagref(void, T) ?`inner ( T & this ) { tytagref( void, T ) ret = {this}; return ret; }
    3333
    34 
    35 //
    36 // P9_EMBEDDED: Use on every case of plan-9 inheritance, to make "implements embedded" be a closure of plan-9 inheritance.
    37 //
    38 // struct foo {
    39 //    int a, b, c;
    40 //    inline (bar);
    41 // };
    42 // P9_EMBEDDED( foo, bar )
    43 //
    44 
    45 // usual version, for structs that are top-level declarations
    46 #define P9_EMBEDDED(        derived, immedBase ) P9_EMBEDDED_DECL_( derived, immedBase, static ) P9_EMBEDDED_BDY_( immedBase )
    47 
    48 // special version, for structs that are declared in functions
    49 #define P9_EMBEDDED_INFUNC( derived, immedBase ) P9_EMBEDDED_DECL_( derived, immedBase,        ) P9_EMBEDDED_BDY_( immedBase )
    50 
    51 // forward declarations of both the above; generally not needed
    52 // may help you control where the P9_EMBEEDED cruft goes, in case "right after the stuct" isn't where you want it
    53 #define P9_EMBEDDED_FWD(        derived, immedBase )      P9_EMBEDDED_DECL_( derived, immedBase, static ) ;
    54 #define P9_EMBEDDED_FWD_INFUNC( derived, immedBase ) auto P9_EMBEDDED_DECL_( derived, immedBase,        ) ;
    55 
    56 // private helpers
    57 #define P9_EMBEDDED_DECL_( derived, immedBase, STORAGE ) \
    58     forall( Tbase &, TdiscardPath & | { tytagref( TdiscardPath, Tbase ) ?`inner( immedBase & ); } ) \
    59     STORAGE inline tytagref(immedBase, Tbase) ?`inner( derived & this )
    60    
    61 #define P9_EMBEDDED_BDY_( immedBase ) { \
     34// use this on every case of plan-9 inheritance, to make embedded a closure of plan-9 inheritance
     35#define P9_EMBEDDED( derived, immedBase ) \
     36forall( Tbase &, TdiscardPath & | { tytagref( TdiscardPath, Tbase ) ?`inner( immedBase & ); } ) \
     37    static inline tytagref(immedBase, Tbase) ?`inner( derived & this ) { \
    6238        immedBase & ib = this; \
    6339        Tbase & b = ib`inner; \
Note: See TracChangeset for help on using the changeset viewer.