Changes in / [833ba13:a25f64b]
- Location:
- libcfa/src/bits
- Files:
-
- 6 edited
-
queue.hfa (modified) (1 diff)
-
queue_example.cfa (modified) (2 diffs)
-
sequence.hfa (modified) (7 diffs)
-
sequence_example.cfa (modified) (3 diffs)
-
stack.hfa (modified) (1 diff)
-
stack_example.cfa (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/bits/queue.hfa
r833ba13 ra25f64b 187 187 } // post: curr = {e in q} 188 188 189 bool ?>>?( QueueIter(T) & qi, T && tp ) with( qi ) {189 bool ?>>?( QueueIter(T) & qi, T *& tp ) with( qi ) { 190 190 if ( curr ) { 191 &tp = Curr( qi );191 tp = Curr( qi ); 192 192 T * n = Next( Curr( qi ) ); 193 193 curr = (n == Curr( qi ) ) ? 0p : n; 194 } else &tp = 0p;195 return &tp != 0p;194 } else tp = 0p; 195 return tp != 0p; 196 196 } 197 197 // post: elts == null & !operator>>(tp) | elts != null & *tp' in elts & elts' == elts - *tp & operator>>(tp) -
libcfa/src/bits/queue_example.cfa
r833ba13 ra25f64b 17 17 Queue(Fred) fred; 18 18 QueueIter(Fred) fredIter = { fred }; 19 Fred & f; 19 Fred * f; 20 int i; 20 21 21 22 sout | nlOff; // turn off auto newline 22 23 23 24 for ( ; fredIter >> f; ) { // empty list 24 sout | f .i | ' ';25 sout | f->i | ' '; 25 26 } 26 27 sout | "empty" | nl; 27 28 28 for ( i ; 10) {29 for ( i = 0; i < 10; i += 1 ) { 29 30 add( fred, new( 2 * i ) ); 30 31 } 31 32 32 for ( QueueIter(Fred) iter = { fred }; iter >> f; ) {33 sout | f .i | ' ';33 for ( over( fredIter, fred ); fredIter >> f; ) { 34 sout | f->i | ' '; 34 35 } 35 36 sout | nl; 36 37 37 for ( i ; 9) {38 for ( i = 0; i < 9; i += 1 ) { 38 39 delete( drop( fred ) ); 39 40 } 40 41 41 42 for ( over( fredIter, fred ); fredIter >> f; ) { 42 sout | f .i | ' ';43 sout | f->i | ' '; 43 44 } 44 45 sout | nl; 45 46 46 for ( i ; 10) {47 for ( i = 0; i < 10; i += 1 ) { 47 48 add( fred, new( 2 * i + 1 ) ); 48 49 } 49 50 for ( over( fredIter, fred ); fredIter >> f; ) { 50 sout | f .i | ' ';51 sout | f->i | ' '; 51 52 } 52 53 sout | nl; 53 54 54 55 for ( over( fredIter, fred ); fredIter >> f; ) { 55 delete( &f );56 delete( f ); 56 57 } 57 58 … … 70 71 Queue(Mary) mary; 71 72 QueueIter(Mary) maryIter = { mary }; 72 Mary &m;73 Mary * m; 73 74 74 75 for ( ; maryIter >> m; ) { // empty list 75 sout | m .i | m.j | ' ';76 sout | m->i | m->j | ' '; 76 77 } 77 78 sout | "empty" | nl; 78 79 79 for ( i ; 10) {80 for ( i = 0; i < 10; i += 1 ) { 80 81 add( mary, new( 2 * i ) ); 81 82 } 82 83 83 for ( QueueIter(Mary) iter = { mary }; iter >> m; ) {84 sout | m .i | m.j | ' ';84 for ( over( maryIter, mary ); maryIter >> m; ) { 85 sout | m->i | m->j | ' '; 85 86 } 86 87 sout | nl; 87 88 88 for ( i ; 9) {89 for ( i = 0; i < 9; i += 1 ) { 89 90 delete( drop( mary ) ); 90 91 } 91 92 92 93 for ( over( maryIter, mary ); maryIter >> m; ) { 93 sout | m .i | m.j | ' ';94 sout | m->i | m->j | ' '; 94 95 } 95 96 sout | nl; 96 97 97 for ( i ; 10) {98 for ( i = 0; i < 10; i += 1 ) { 98 99 add( mary, new( 2 * i + 1 ) ); 99 100 } 100 101 for ( over( maryIter, mary ); maryIter >> m; ) { 101 sout | m .i | m.j | ' ';102 sout | m->i | m->j | ' '; 102 103 } 103 104 sout | nl; 104 105 105 106 for ( over( maryIter, mary ); maryIter >> m; ) { 106 delete( &m );107 delete( m ); 107 108 } 108 109 } -
libcfa/src/bits/sequence.hfa
r833ba13 ra25f64b 116 116 117 117 // Insert *n into the sequence after *aft, or at the beginning if aft == 0. 118 void insertAft( Sequence(T) & s, T * aft, T *n ) with( s ) { // pre: !n->listed() & *aft in *s118 void insertAft( Sequence(T) & s, T *aft, T *n ) with( s ) { // pre: !n->listed() & *aft in *s 119 119 #ifdef __CFA_DEBUG__ 120 120 if ( listed( n ) ) abort( "(Sequence &)%p.insertAft( %p, %p ) : Node is already on another list.", &s, aft, n ); … … 145 145 146 146 // pre: n->listed() & *n in *s 147 void remove( Sequence(T) & s, T * n ) with( s ) { // O(1)147 void remove( Sequence(T) & s, T *n ) with( s ) { // O(1) 148 148 #ifdef __CFA_DEBUG__ 149 149 if ( ! listed( n ) ) abort( "(Sequence &)%p.remove( %p ) : Node is not on a list.", &s, n ); … … 159 159 160 160 // Add an element to the head of the sequence. 161 void addHead( Sequence(T) & s, T * n ) {// pre: !n->listed(); post: n->listed() & head() == n161 void addHead( Sequence(T) & s, T *n ) { // pre: !n->listed(); post: n->listed() & head() == n 162 162 insertAft( s, 0, n ); 163 163 } 164 164 // Add an element to the tail of the sequence. 165 void addTail( Sequence(T) & s, T * n ) {// pre: !n->listed(); post: n->listed() & head() == n165 void addTail( Sequence(T) & s, T *n ) { // pre: !n->listed(); post: n->listed() & head() == n 166 166 insertBef( s, n, 0 ); 167 167 } 168 168 // Add an element to the tail of the sequence. 169 void add( Sequence(T) & s, T * n ) {// pre: !n->listed(); post: n->listed() & head() == n169 void add( Sequence(T) & s, T *n ) { // pre: !n->listed(); post: n->listed() & head() == n 170 170 addTail( s, n ); 171 171 } … … 244 244 ((ColIter &) si){}; 245 245 seq = &s; 246 curr = head( s );247 246 } // post: elts = null. 248 247 … … 252 251 } // post: elts = {e in s}. 253 252 254 bool ?>>?( SeqIter(T) & si, T && tp ) with( si ) {253 bool ?>>?( SeqIter(T) & si, T *& tp ) with( si ) { 255 254 if ( curr ) { 256 &tp = Curr( si );257 T * n = succ( *seq, Curr( si ) );255 tp = Curr( si ); 256 T *n = succ( *seq, Curr( si ) ); 258 257 curr = n == head( *seq ) ? 0p : n; 259 } else &tp = 0p;260 return &tp != 0p;258 } else tp = 0p; 259 return tp != 0p; 261 260 } 262 261 } // distribution … … 283 282 ((ColIter &) si){}; 284 283 seq = &s; 285 curr = tail( s );286 284 } // post: elts = null. 287 285 … … 291 289 } // post: elts = {e in s}. 292 290 293 bool ?>>?( SeqIterRev(T) & si, T &&tp ) with( si ) {291 bool ?>>?( SeqIterRev(T) & si, T *&tp ) with( si ) { 294 292 if ( curr ) { 295 &tp = Curr( si );296 T * n = pred( *seq, Curr( si ) );293 tp = Curr( si ); 294 T *n = pred( *seq, Curr( si ) ); 297 295 curr = n == tail( *seq ) ? 0p : n; 298 } else &tp = 0p;299 return &tp != 0p;296 } else tp = 0p; 297 return tp != 0p; 300 298 } 301 299 } // distribution -
libcfa/src/bits/sequence_example.cfa
r833ba13 ra25f64b 17 17 Sequence(Fred) fred; 18 18 SeqIter(Fred) fredIter = { fred }; 19 Fred & f; 19 Fred * f; 20 int i; 20 21 21 22 sout | nlOff; // turn off auto newline 22 23 23 24 for ( ; fredIter >> f; ) { // empty list 24 sout | f .i | ' ';25 sout | f->i | ' '; 25 26 } 26 27 sout | "empty" | nl; 27 28 28 for ( i ; 10) {29 for ( i = 0; i < 10; i += 1 ) { 29 30 add( fred, new( 2 * i ) ); 30 31 } 31 32 32 for ( SeqIter(Fred) iter = { fred }; iter >> f; ) {33 sout | f .i | ' ';33 for ( over( fredIter, fred ); fredIter >> f; ) { 34 sout | f->i | ' '; 34 35 } 35 36 sout | nl; 36 37 37 for ( i ; 9) {38 for ( i = 0; i < 9; i += 1 ) { 38 39 delete( dropHead( fred ) ); 39 40 } 40 41 41 42 for ( over( fredIter, fred ); fredIter >> f; ) { 42 sout | f .i | ' ';43 sout | f->i | ' '; 43 44 } 44 45 sout | nl; 45 46 46 for ( i ; 10) {47 for ( i = 0; i < 10; i += 1 ) { 47 48 addTail( fred, new( 2 * i + 1 ) ); 48 49 } 49 50 for ( over( fredIter, fred ); fredIter >> f; ) { 50 sout | f .i | ' ';51 sout | f->i | ' '; 51 52 } 52 53 sout | nl; 53 54 54 for ( i ; 9) {55 delete( &dropTail( fred ) );55 for ( i = 0; i < 9; i += 1 ) { 56 delete( dropTail( fred ) ); 56 57 } 57 58 for ( over( fredIter, fred ); fredIter >> f; ) { 58 sout | f .i | ' ';59 sout | f->i | ' '; 59 60 } 60 61 sout | nl; 61 62 62 63 for ( over( fredIter, fred ); fredIter >> f; ) { 63 delete( &f );64 delete( f ); 64 65 } 65 66 … … 79 80 Sequence(Mary) baz; 80 81 SeqIter(Mary) maryIter = { mary }; 81 Mary &m;82 Mary * m; 82 83 83 84 for ( ; maryIter >> m; ) { // empty list 84 sout | m .i | m.j | ' ';85 sout | m->i | m->j | ' '; 85 86 } 86 87 sout | "empty" | nl; 87 88 88 for ( i ; 10) {89 for ( i = 0; i < 10; i += 1 ) { 89 90 add( mary, new( 2 * i ) ); 90 91 add( baz, new( 2 * i ) ); 91 92 } 92 93 93 for ( SeqIter(Mary) iter = { mary }; iter >> m; ) {94 sout | m .i | m.j | ' ';94 for ( over( maryIter, mary ); maryIter >> m; ) { 95 sout | m->i | m->j | ' '; 95 96 } 96 97 sout | nl; 97 98 98 for ( i ; 9) {99 for ( i = 0; i < 9; i += 1 ) { 99 100 delete( dropHead( mary ) ); 100 101 } 101 102 102 103 for ( over( maryIter, mary ); maryIter >> m; ) { 103 sout | m .i | m.j | ' ';104 sout | m->i | m->j | ' '; 104 105 } 105 106 sout | nl; 106 107 107 for ( i ; 10) {108 for ( i = 0; i < 10; i += 1 ) { 108 109 addTail( mary, new( 2 * i + 1 ) ); 109 110 } 110 111 for ( over( maryIter, mary ); maryIter >> m; ) { 111 sout | m .i | m.j | ' ';112 sout | m->i | m->j | ' '; 112 113 } 113 114 sout | nl; 114 115 115 for ( i ; 9) {116 delete( &dropTail( mary ) );116 for ( i = 0; i < 9; i += 1 ) { 117 delete( dropTail( mary ) ); 117 118 } 118 119 for ( over( maryIter, mary ); maryIter >> m; ) { 119 sout | m .i | m.j | ' ';120 sout | m->i | m->j | ' '; 120 121 } 121 122 sout | nl; … … 124 125 125 126 for ( over( maryIter, baz ); maryIter >> m; ) { 126 sout | m .i | m.j | ' ';127 sout | m->i | m->j | ' '; 127 128 } 128 129 sout | "empty" | nl; 129 130 130 131 for ( over( maryIter, mary ); maryIter >> m; ) { 131 sout | m .i | m.j | ' ';132 sout | m->i | m->j | ' '; 132 133 } 133 134 sout | nl; 134 135 135 136 for ( over( maryIter, mary ); maryIter >> m; ) { 136 delete( &m );137 delete( m ); 137 138 } 138 139 } 139 140 140 141 // Local Variables: // 141 // compile-command: "cfa sequence_example.c fa" //142 // compile-command: "cfa sequence_example.cc" // 142 143 // End: // -
libcfa/src/bits/stack.hfa
r833ba13 ra25f64b 99 99 } // post: curr = {e in s} 100 100 101 bool ?>>?( StackIter(T) & si, T && tp ) with( si ) {101 bool ?>>?( StackIter(T) & si, T *& tp ) with( si ) { 102 102 if ( curr ) { 103 &tp = Curr( si );103 tp = Curr( si ); 104 104 T * n = Next( Curr( si ) ); 105 105 curr = (n == Curr( si ) ) ? 0p : n; 106 } else &tp = 0p;107 return &tp != 0p;106 } else tp = 0p; 107 return tp != 0p; 108 108 } 109 109 } // distribution -
libcfa/src/bits/stack_example.cfa
r833ba13 ra25f64b 17 17 Stack(Fred) fred; 18 18 StackIter(Fred) fredIter = { fred }; 19 Fred & f; 19 Fred * f; 20 int i; 20 21 21 22 sout | nlOff; // turn off auto newline 22 23 23 24 for ( ; fredIter >> f; ) { // empty list 24 sout | f .i | ' ';25 sout | f->i | ' '; 25 26 } 26 27 sout | "empty" | nl; 27 28 28 for ( i ; 10) {29 for ( i = 0; i < 10; i += 1 ) { 29 30 push( fred, new( 2 * i ) ); 30 31 } 31 32 32 for ( StackIter(Fred) iter = { fred }; iter >> f; ) {33 sout | f .i | ' ';33 for ( over( fredIter, fred ); fredIter >> f; ) { 34 sout | f->i | ' '; 34 35 } 35 36 sout | nl; 36 37 37 for ( i ; 9) {38 for ( i = 0; i < 9; i += 1 ) { 38 39 delete( pop( fred ) ); 39 40 } 40 41 41 42 for ( over( fredIter, fred ); fredIter >> f; ) { 42 sout | f .i | ' ';43 sout | f->i | ' '; 43 44 } 44 45 sout | nl; 45 46 46 for ( i ; 10) {47 for ( i = 0; i < 10; i += 1 ) { 47 48 push( fred, new( 2 * i + 1 ) ); 48 49 } 49 50 for ( over( fredIter, fred ); fredIter >> f; ) { 50 sout | f .i | ' ';51 sout | f->i | ' '; 51 52 } 52 53 sout | nl; 53 54 54 55 for ( over( fredIter, fred ); fredIter >> f; ) { 55 delete( &f );56 delete( f ); 56 57 } 57 58 … … 70 71 Stack(Mary) mary; 71 72 StackIter(Mary) maryIter = { mary }; 72 Mary &m;73 Mary * m; 73 74 74 75 for ( ; maryIter >> m; ) { // empty list 75 sout | m .i | m.j | ' ';76 sout | m->i | m->j | ' '; 76 77 } 77 78 sout | "empty" | nl; 78 79 79 for ( i ; 10) {80 for ( i = 0; i < 10; i += 1 ) { 80 81 push( mary, new( 2 * i ) ); 81 82 } 82 83 83 for ( StackIter(Mary) iter = { mary }; iter >> m; ) {84 sout | m .i | m.j | ' ';84 for ( over( maryIter, mary ); maryIter >> m; ) { 85 sout | m->i | m->j | ' '; 85 86 } 86 87 sout | nl; 87 88 88 for ( i ; 9) {89 for ( i = 0; i < 9; i += 1 ) { 89 90 delete( pop( mary ) ); 90 91 } 91 92 92 93 for ( over( maryIter, mary ); maryIter >> m; ) { 93 sout | m .i | m.j | ' ';94 sout | m->i | m->j | ' '; 94 95 } 95 96 sout | nl; 96 97 97 for ( i ; 10) {98 for ( i = 0; i < 10; i += 1 ) { 98 99 push( mary, new( 2 * i + 1 ) ); 99 100 } 100 101 for ( over( maryIter, mary ); maryIter >> m; ) { 101 sout | m .i | m.j | ' ';102 sout | m->i | m->j | ' '; 102 103 } 103 104 sout | nl; 104 105 105 106 for ( over( maryIter, mary ); maryIter >> m; ) { 106 delete( &m );107 delete( m ); 107 108 } 108 109 }
Note:
See TracChangeset
for help on using the changeset viewer.