Ignore:
File:
1 edited

Legend:

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

    ra78c3ff ra5a67ab8  
    22
    33#include "collection.hfa"
    4 #include <stdlib.hfa>
    5 #include <stdio.h>
    64
    75struct Seqable {
     
    5048                T & tail( Sequence(T) & s ) with( s ) {
    5149                        return root ? (T &)*Back( &head( s ) ) : *0p;
    52                 }       // post: empty() & tail() == 0 | !empty() & tail() in *s\
     50                }       // post: empty() & tail() == 0 | !empty() & tail() in *s
    5351
    5452                // Return a pointer to the element after *n, or 0p if there isn't one.
    55                 T & succ( Sequence(T) & s, T & n ) with( s ) {  // pre: *n in *s
    56 #ifdef __CFA_DEBUG__
    57                         if ( ! listed( &n ) ) abort( "(Sequence &)%p.succ( %p ) : Node is not on a list.", &s, &n );
    58 #endif // __CFA_DEBUG__
    59                         return Next( &n ) == &head( s ) ? *0p : *Next( &n );
    60                 }       // post: n == tail() & succ(n) == 0 | n != tail() & *succ(n) in *s
     53                T * succ( Sequence(T) & s, T * n ) with( s ) {  // pre: *n in *s
     54#ifdef __CFA_DEBUG__
     55                        if ( ! listed( n ) ) abort( "(Sequence &)%p.succ( %p ) : Node is not on a list.", &s, n );
     56#endif // __CFA_DEBUG__
     57                        return Next( n ) == &head( s ) ? 0p : Next( n );
     58                } // post: n == tail() & succ(n) == 0 | n != tail() & *succ(n) in *s
    6159
    6260                // Return a pointer to the element before *n, or 0p if there isn't one.
    63                 T & pred( Sequence(T) & s, T & n ) with( s ) {  // pre: *n in *s
    64 #ifdef __CFA_DEBUG__
    65                         if ( ! listed( &n ) ) abort( "(Sequence &)%p.pred( %p ) : Node is not on a list.", &s, &n );
    66 #endif // __CFA_DEBUG__
    67                         return &n == &head( s ) ? *0p : *Back( &n );
     61                T * pred( Sequence(T) & s, T * n ) with( s ) {  // pre: *n in *s
     62#ifdef __CFA_DEBUG__
     63                        if ( ! listed( n ) ) abort( "(Sequence &)%p.pred( %p ) : Node is not on a list.", &s, n );
     64#endif // __CFA_DEBUG__
     65                        return n == &head( s ) ? 0p : Back( n );
    6866                }       // post: n == head() & head(n) == 0 | n != head() & *pred(n) in *s
    6967
     
    137135                        if ( &n == &head( s ) ) {
    138136                                if ( Next( &head( s ) ) == &head( s ) ) root = 0p;
    139                                 else root = Next( &head(s ) );
     137                                else root = Next( &head( s ) );
    140138                        } // if
    141139                        Back( Next( &n ) ) = Back( &n );
     
    227225                        curr = &head( s );
    228226                } // post: elts = null.
    229                
     227
     228                void ?{}( SeqIter(T) & si, Sequence(T) & s, T & start ) with( si ) {
     229                        ((ColIter &) si){};
     230                        seq = &s;
     231                        curr = &start;
     232                } // post: elts = null.
     233
    230234                void over( SeqIter(T) & si, Sequence(T) & s ) with( si ) {
    231235                        seq = &s;
     
    236240                        if ( curr ) {
    237241                                &tp = Curr( si );
    238                                 T * n = &succ( *seq, *Curr( si ) );
     242                                T * n = succ( *seq, Curr( si ) );
    239243                                curr = n == &head( *seq ) ? 0p : n;
    240244                        } else &tp = 0p;
     
    261265                        curr = &tail( s );
    262266                } // post: elts = null.
    263                
     267
     268                void ?{}( SeqIterRev(T) & si, Sequence(T) & s, T & start ) with( si ) {
     269                        ((ColIter &) si){};
     270                        seq = &s;
     271                        curr = &start;
     272                } // post: elts = null.
     273
    264274                void over( SeqIterRev(T) & si, Sequence(T) & s ) with( si ) {
    265275                        seq = &s;
     
    270280                        if ( curr ) {
    271281                                &tp = Curr( si );
    272                                 T * n = &pred( *seq, *Curr( si ) );
     282                                T * n = pred( *seq, Curr( si ) );
    273283                                curr = n == &tail( *seq ) ? 0p : n;
    274284                        } else &tp = 0p;
     
    279289
    280290// Local Variables: //
    281 // compile-command: "make install" //
     291// compile-command: "cfa sequence.hfa" //
    282292// End: //
Note: See TracChangeset for help on using the changeset viewer.