Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/bits/queue.hfa

    r636d3715 r5e82d56  
    1515                } // post: empty() & head() == 0 | !empty() & head() in *q
    1616
     17                bool empty( Queue(T) & q ) with( q ) {                  // 0 <=> *q contains no elements
     18                        return empty( (Collection &)q );
     19                }
     20
     21                bool listed( T * n ) {
     22                        return Next( (Colable *)n ) != 0;
     23                }
     24
     25                T *& Next( T * n ) {
     26                        return (T *)Next( (Colable *)n );
     27                }
     28
     29                T * Root( Queue(T) & q ) with( q ) {
     30                        return (T *)root;
     31                }
     32
    1733                void ?{}( Queue(T) &, const Queue(T) & ) = void; // no copy
    1834                Queue(T) & ?=?( const Queue(T) & ) = void;              // no assignment
     
    3955#endif // __CFA_DEBUG__
    4056                        if ( last ) {
    41                                 Next( n ) = head( q );
     57                                Next( n ) = Root( q );
    4258                                q.root = n;
    4359                        } else {
     
    6581                        if ( root ) {
    6682                                root = Next( root );
    67                                 if ( head( q ) == t ) {
     83                                if ( Root( q ) == t ) {
    6884                                        root = last = 0p;                                       // only one element
    6985                                }
     
    116132                                root = from.root;
    117133                        } else {                                                                        // "to" list not empty
    118                                 Next( last ) = head( from );
     134                                Next( last ) = Root( from );
    119135                        }
    120136                        last = from.last;
     
    132148                        to.last = n;                                                            // end of "to" list
    133149                        from.root = Next( n );                                          // start of "from" list
    134                         if ( n == head( from ) ) {                                      // last node in list ?
     150                        if ( n == Root( from ) ) {                                      // last node in list ?
    135151                                from.root = from.last = 0p;                             // mark "from" list empty
    136152                        } else {
     
    148164
    149165        inline {
     166                // wrappers to make ColIter have T
     167                T * Curr( QueueIter(T) & qi ) with( qi ) {
     168                        return (T *)curr;
     169                }
     170
    150171                void ?{}( QueueIter(T) & qi ) with( qi ) {
    151172                        ((ColIter &)qi){};
     
    166187                } // post: curr = {e in q}
    167188
    168                 bool ?>>?( QueueIter(T) & qi, T && tp ) with( qi ) {
     189                bool ?>>?( QueueIter(T) & qi, T *& tp ) with( qi ) {
    169190                        if ( curr ) {
    170                                 &tp = Curr( qi );
     191                                tp = Curr( qi );
    171192                                T * n = Next( Curr( qi ) );
    172193                                curr = (n == Curr( qi ) ) ? 0p : n;
    173                         } else &tp = 0p;
    174                         return &tp != 0p;
     194                        } else tp = 0p;
     195                        return tp != 0p;
    175196                }
    176197                // post: elts == null & !operator>>(tp) | elts != null & *tp' in elts & elts' == elts - *tp & operator>>(tp)
Note: See TracChangeset for help on using the changeset viewer.