Ignore:
File:
1 edited

Legend:

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

    ra5a67ab8 ra78c3ff  
    22
    33#include "collection.hfa"
     4#include <stdlib.hfa>
     5#include <stdio.h>
    46
    57struct Seqable {
     
    4850                T & tail( Sequence(T) & s ) with( s ) {
    4951                        return root ? (T &)*Back( &head( s ) ) : *0p;
    50                 }       // post: empty() & tail() == 0 | !empty() & tail() in *s
     52                }       // post: empty() & tail() == 0 | !empty() & tail() in *s\
    5153
    5254                // Return a pointer to the element after *n, or 0p if there isn't one.
    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
     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
    5961
    6062                // Return a pointer to the element before *n, or 0p if there isn't one.
    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 );
     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 );
    6668                }       // post: n == head() & head(n) == 0 | n != head() & *pred(n) in *s
    6769
     
    135137                        if ( &n == &head( s ) ) {
    136138                                if ( Next( &head( s ) ) == &head( s ) ) root = 0p;
    137                                 else root = Next( &head( s ) );
     139                                else root = Next( &head(s ) );
    138140                        } // if
    139141                        Back( Next( &n ) ) = Back( &n );
     
    225227                        curr = &head( s );
    226228                } // post: elts = null.
    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 
     229               
    234230                void over( SeqIter(T) & si, Sequence(T) & s ) with( si ) {
    235231                        seq = &s;
     
    240236                        if ( curr ) {
    241237                                &tp = Curr( si );
    242                                 T * n = succ( *seq, Curr( si ) );
     238                                T * n = &succ( *seq, *Curr( si ) );
    243239                                curr = n == &head( *seq ) ? 0p : n;
    244240                        } else &tp = 0p;
     
    265261                        curr = &tail( s );
    266262                } // post: elts = null.
    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 
     263               
    274264                void over( SeqIterRev(T) & si, Sequence(T) & s ) with( si ) {
    275265                        seq = &s;
     
    280270                        if ( curr ) {
    281271                                &tp = Curr( si );
    282                                 T * n = pred( *seq, Curr( si ) );
     272                                T * n = &pred( *seq, *Curr( si ) );
    283273                                curr = n == &tail( *seq ) ? 0p : n;
    284274                        } else &tp = 0p;
     
    289279
    290280// Local Variables: //
    291 // compile-command: "cfa sequence.hfa" //
     281// compile-command: "make install" //
    292282// End: //
Note: See TracChangeset for help on using the changeset viewer.