Changeset 3e36f220
- Timestamp:
- Dec 28, 2020, 4:13:58 PM (4 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 6ae5c22
- Parents:
- b6460bf (diff), bf1914e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified libcfa/src/bits/collection.hfa ¶
rb6460bf r3e36f220 68 68 69 69 struct ColIter { 70 void * curr; // element to be returned by >>70 void * curr; // element returned by | 71 71 }; 72 72 -
TabularUnified libcfa/src/bits/queue.hfa ¶
rb6460bf r3e36f220 2 2 3 3 #include "bits/collection.hfa" 4 5 // A Queue(T) is a Collection(T) defining the ordering that nodes are returned by drop() in the same order from those 6 // added by add(). T must be a public descendant of uColable. 7 8 // The implementation is a typical singly-linked list, except the next field of the last element points to itself 9 // instead of being null. 4 10 5 11 forall( dtype T | { T *& Next ( T * ); } ) { … … 108 114 } // post: ! listed( n ) 109 115 110 T & dropTail( Queue(T) & q ) with( q ) { 116 T & dropTail( Queue(T) & q ) with( q ) { // O(n) 111 117 T & n = tail( q ); 112 118 return &n ? remove( q, n ), n : *0p; … … 155 161 } // post: curr == 0p 156 162 157 // create an iterator active in Queue q163 // create an iterator active in queue q 158 164 void ?{}( QueueIter(T) & qi, Queue(T) & q ) with( qi ) { 159 165 curr = &head( q ); … … 164 170 } // post: curr = {e in q} 165 171 166 // make existing iterator active in Queue q172 // make existing iterator active in queue q 167 173 void over( QueueIter(T) & qi, Queue(T) & q ) with( qi ) { 168 174 curr = &head( q ); 169 175 } // post: curr = {e in q} 170 176 171 bool ? >>?( QueueIter(T) & qi, T && tp ) with( qi ) {177 bool ?|?( QueueIter(T) & qi, T && tp ) with( qi ) { 172 178 if ( curr ) { 173 179 &tp = Curr( qi ); … … 177 183 return &tp != 0p; 178 184 } 179 // post: elts == null & !operator >>(tp) | elts != null & *tp' in elts & elts' == elts - *tp & operator>>(tp)185 // post: elts == null & !operator|(tp) | elts != null & *tp' in elts & elts' == elts - *tp & operator|(tp) 180 186 } // distribution 181 187 } // distribution -
TabularUnified libcfa/src/bits/sequence.hfa ¶
rb6460bf r3e36f220 36 36 } // distribution 37 37 38 39 // A Sequence(T) is a Collection(T) defining the ordering of a uStack and uQueue, and to insert and remove elements 40 // anywhere in the sequence. T must be a public descendant of uSeqable. 41 42 // The implementation is a typical doubly-linked list, except the next field of the last node points at the first node 43 // and the back field of the last node points at the first node (circular). 44 38 45 forall( dtype T | { T *& Back ( T * ); T *& Next ( T * ); } ) { 39 46 struct Sequence { … … 52 59 void ?{}( Sequence(T) & s ) with( s ) { 53 60 ((Collection &)s){}; 54 } // post: isEmpty() .55 56 // Return a pointer to the last sequence element, without removing it. 61 } // post: isEmpty() 62 63 // Return a pointer to the last sequence element, without removing it. 57 64 T & tail( Sequence(T) & s ) with( s ) { 58 65 return root ? (T &)*Back( &head( s ) ) : *0p; … … 67 74 } // post: n == tail() & succ(n) == 0 | n != tail() & *succ(n) in *s 68 75 69 // Return a pointer to the element before *n, or 0p if there isn't one.76 // Return a pointer to the element before *n, or 0p if list empty. 70 77 T * pred( Sequence(T) & s, T * n ) with( s ) { // pre: *n in *s 71 78 #ifdef __CFA_DEBUG__ … … 73 80 #endif // __CFA_DEBUG__ 74 81 return n == &head( s ) ? 0p : Back( n ); 75 } 76 77 78 // Insert *n into the sequence before *bef, or at the end if bef == 0 .82 } // post: n == head() & head(n) == 0 | n != head() & *pred(n) in *s 83 84 85 // Insert *n into the sequence before *bef, or at the end if bef == 0p. 79 86 T & insertBef( Sequence(T) & s, T & n, T & bef ) with( s ) { // pre: !n->listed() & *bef in *s 80 87 #ifdef __CFA_DEBUG__ … … 137 144 } // if 138 145 return n; 139 } 146 } // post: n->listed() & *n in *s & succ(n) == bef 140 147 141 148 // pre: n->listed() & *n in *s … … 152 159 Next( &n ) = Back( &n ) = 0p; 153 160 return n; 154 } // post: !n->listed().161 } // post: !n->listed() 155 162 156 163 // Add an element to the head of the sequence. … … 158 165 return insertAft( s, *0p, n ); 159 166 } 167 160 168 // Add an element to the tail of the sequence. 161 169 T & addTail( Sequence(T) & s, T & n ) { // pre: !n->listed(); post: n->listed() & head() == n 162 170 return insertBef( s, n, *0p ); 163 171 } 172 164 173 // Add an element to the tail of the sequence. 165 174 T & add( Sequence(T) & s, T & n ) { // pre: !n->listed(); post: n->listed() & head() == n 166 175 return addTail( s, n ); 167 176 } 177 168 178 // Remove and return the head element in the sequence. 169 179 T & dropHead( Sequence(T) & s ) { … … 171 181 return &n ? remove( s, n ), n : *0p; 172 182 } 183 173 184 // Remove and return the head element in the sequence. 174 185 T & drop( Sequence(T) & s ) { 175 186 return dropHead( s ); 176 187 } 188 177 189 // Remove and return the tail element in the sequence. 178 190 T & dropTail( Sequence(T) & s ) { … … 233 245 ((ColIter &)si){}; 234 246 seq = 0p; 235 } // post: elts = null. 236 247 } // post: elts = null 248 249 // Create a iterator active in sequence s. 237 250 void ?{}( SeqIter(T) & si, Sequence(T) & s ) with( si ) { 238 251 ((ColIter &)si){}; 239 252 seq = &s; 240 253 curr = &head( s ); 241 } // post: elts = null .254 } // post: elts = null 242 255 243 256 void ?{}( SeqIter(T) & si, Sequence(T) & s, T & start ) with( si ) { … … 245 258 seq = &s; 246 259 curr = &start; 247 } // post: elts = null. 248 260 } // post: elts = null 261 262 // Make the iterator active in sequence s. 249 263 void over( SeqIter(T) & si, Sequence(T) & s ) with( si ) { 250 264 seq = &s; 251 265 curr = &head( s ); 252 } // post: elts = {e in s} .253 254 bool ? >>?( SeqIter(T) & si, T && tp ) with( si ) {266 } // post: elts = {e in s} 267 268 bool ?|?( SeqIter(T) & si, T && tp ) with( si ) { 255 269 if ( curr ) { 256 270 &tp = Curr( si ); … … 274 288 ((ColIter &)si){}; 275 289 seq = 0p; 276 } // post: elts = null. 277 290 } // post: elts = null 291 292 // Create a iterator active in sequence s. 278 293 void ?{}( SeqIterRev(T) & si, Sequence(T) & s ) with( si ) { 279 294 ((ColIter &)si){}; 280 295 seq = &s; 281 296 curr = &tail( s ); 282 } // post: elts = null .297 } // post: elts = null 283 298 284 299 void ?{}( SeqIterRev(T) & si, Sequence(T) & s, T & start ) with( si ) { … … 286 301 seq = &s; 287 302 curr = &start; 288 } // post: elts = null. 289 303 } // post: elts = null 304 305 // Make the iterator active in sequence s. 290 306 void over( SeqIterRev(T) & si, Sequence(T) & s ) with( si ) { 291 307 seq = &s; 292 308 curr = &tail( s ); 293 } // post: elts = {e in s} .294 295 bool ? >>?( SeqIterRev(T) & si, T && tp ) with( si ) {309 } // post: elts = {e in s} 310 311 bool ?|?( SeqIterRev(T) & si, T && tp ) with( si ) { 296 312 if ( curr ) { 297 313 &tp = Curr( si ); -
TabularUnified libcfa/src/bits/stack.hfa ¶
rb6460bf r3e36f220 2 2 3 3 #include "bits/collection.hfa" 4 5 // A Stack(T) is a Collection(T) defining the ordering that nodes are returned by drop() in the reverse order from those 6 // added by add(). T must be a public descendant of uColable. 7 8 // The implementation is a typical singly-linked list, except the next field of the last element points to itself 9 // instead of being null. 4 10 5 11 forall( dtype T | { T *& Next ( T * ); } ) { … … 58 64 } // distribution 59 65 66 // A StackIter(T) is a subclass of ColIter(T) that generates the elements of a Stack(T). It returns the elements in the 67 // order returned by drop(). 60 68 61 69 forall( dtype T | { T *& Next ( T * ); } ) { … … 69 77 } // post: curr == 0p 70 78 71 // create an iterator active in Stack s79 // create an iterator active in stack s 72 80 void ?{}( StackIter(T) & si, Stack(T) & s ) with( si ) { 73 81 curr = &head( s ); … … 78 86 } // post: curr = {e in s} 79 87 80 // make existing iterator active in Stack q88 // make existing iterator active in stack s 81 89 void over( StackIter(T) & si, Stack(T) & s ) with( si ) { 82 90 curr = &head( s ); 83 91 } // post: curr = {e in s} 84 92 85 bool ? >>?( StackIter(T) & si, T && tp ) with( si ) {93 bool ?|?( StackIter(T) & si, T && tp ) with( si ) { 86 94 if ( curr ) { 87 95 &tp = Curr( si ); -
TabularUnified tests/collections/.expect/queue.txt ¶
rb6460bf r3e36f220 16 16 0 0 2 2 4 4 6 6 8 8 10 10 12 12 14 14 16 16 18 18 17 17 18 18 18 -1 18 -1 18 -1 18 -2 19 -1 -1 18 18 1 1 3 3 5 5 7 7 9 9 11 11 13 13 15 15 17 17 19 19 -2 -2 19 20 18 18 1 1 3 3 5 5 7 7 9 9 11 11 13 13 15 15 17 17 21 18 18 1 1 3 3 5 5 7 7 22 empty 20 23 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 21 24 5 5 6 6 7 7 8 8 9 9 -
TabularUnified tests/collections/.expect/sequence.txt ¶
rb6460bf r3e36f220 19 19 0 0 2 2 4 4 6 6 8 8 10 10 12 12 14 14 16 16 18 18 20 20 18 18 21 -1 18 -1 21 -1 18 -2 22 -1 -1 18 18 1 1 3 3 5 5 7 7 9 9 11 11 13 13 15 15 17 17 19 19 -2 -2 22 23 18 18 1 1 3 3 5 5 7 7 9 9 11 11 13 13 15 15 17 17 24 18 18 1 1 3 3 5 5 7 7 25 empty 23 26 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 24 27 5 5 6 6 7 7 8 8 9 9 -
TabularUnified tests/collections/multi_list.cfa ¶
rb6460bf r3e36f220 73 73 74 74 sout | nlOff; 75 for ( over( sqiter, clustList ); sqiter >>dl; ) { // print lists75 for ( over( sqiter, clustList ); sqiter | dl; ) { // print lists 76 76 Task & tmp = task( dl ); sout | tmp.id; 77 77 // sout | task( dl ).id; 78 78 } 79 79 sout | nl; 80 for ( over( sqiter, readyList ); sqiter >>dl; ) {80 for ( over( sqiter, readyList ); sqiter | dl; ) { 81 81 Task & tmp = task( dl ); sout | tmp.id; 82 82 // sout | task( dl ).id; 83 83 } 84 84 sout | nl; 85 for ( QueueIter(TaskSL) qiter = { mutexList }; qiter >>sl; ) { // print lists85 for ( QueueIter(TaskSL) qiter = { mutexList }; qiter | sl; ) { // print lists 86 86 Task & tmp = task( sl ); sout | tmp.id; 87 87 // sout | task( sl ).id; … … 103 103 push( mutexStack, task.clusterRef ); // insert on lists in opposite directions 104 104 } 105 for ( StackIter(TaskDL) stiter = { mutexStack }; stiter >>dl; ) {105 for ( StackIter(TaskDL) stiter = { mutexStack }; stiter | dl; ) { 106 106 Task & tmp = task( dl ); sout | tmp.id; 107 107 // sout | task( dl ).id; -
TabularUnified tests/collections/queue.cfa ¶
rb6460bf r3e36f220 19 19 20 20 Queue(Fred) fred; 21 QueueIter(Fred) fredIter = { fred };21 QueueIter(Fred) iter = { fred }; 22 22 Fred & f; 23 23 24 24 sout | nlOff; // turn off auto newline 25 25 26 for ( ; fredIter >>f; ) { // empty list26 for ( ; iter | f; ) { // empty list 27 27 sout | f.i | ' '; 28 28 } … … 35 35 sout | head( fred ).i | tail( fred ).i | nl; 36 36 37 for ( QueueIter(Fred) iter = { fred }; iter >>f; ) {37 for ( QueueIter(Fred) iter = { fred }; iter | f; ) { 38 38 sout | f.i | ' '; 39 39 } … … 44 44 } 45 45 46 for ( over( fredIter, fred ); fredIter >>f; ) {46 for ( over( iter, fred ); iter | f; ) { 47 47 sout | f.i | ' '; 48 48 } … … 58 58 59 59 sout | head( fred ).i | succ( fred, head )->i | tail( fred ).i | nl; 60 for ( over( fredIter, fred ); fredIter >> f; ) { 60 61 for ( over( iter, fred ); iter | f; ) { 61 62 sout | f.i | ' '; 62 63 } … … 68 69 delete( &dropTail( fred ) ); 69 70 70 for ( over( fredIter, fred ); fredIter >>f; ) {71 for ( over( iter, fred ); iter | f; ) { 71 72 sout | f.i | ' '; 72 73 } … … 76 77 delete( &dropTail( fred ) ); 77 78 } 78 for ( over( fredIter, fred ); fredIter >>f; ) {79 sout | f.i | ' '; 80 } 81 sout | nl; 82 83 for ( over( fredIter, fred ); fredIter >>f; ) {79 for ( over( iter, fred ); iter | f; ) { 80 sout | f.i | ' '; 81 } 82 sout | nl; 83 84 for ( over( iter, fred ); iter | f; ) { 84 85 delete( &remove( fred, f ) ); 85 86 } 86 for ( over( fredIter, fred ); fredIter >>f; ) {87 for ( over( iter, fred ); iter | f; ) { 87 88 sout | f.i | ' '; 88 89 } … … 96 97 } 97 98 } 98 for ( QueueIter(Fred) iter = { fred }; iter >>f; ) {99 for ( QueueIter(Fred) iter = { fred }; iter | f; ) { 99 100 sout | f.i | ' '; 100 101 } … … 105 106 split( fred2, fred, middle ); 106 107 107 for ( over( fredIter, fred ); fredIter >>f; ) {108 sout | f.i | ' '; 109 } 110 sout | nl; 111 112 for ( over( fredIter, fred2 ); fredIter >>f; ) {108 for ( over( iter, fred ); iter | f; ) { 109 sout | f.i | ' '; 110 } 111 sout | nl; 112 113 for ( over( iter, fred2 ); iter | f; ) { 113 114 sout | f.i | ' '; 114 115 } … … 117 118 transfer( fred, fred2 ); 118 119 119 for ( over( fredIter, fred ); fredIter >>f; ) {120 sout | f.i | ' '; 121 } 122 sout | nl; 123 124 for ( over( fredIter, fred ); fredIter >>f; ) {120 for ( over( iter, fred ); iter | f; ) { 121 sout | f.i | ' '; 122 } 123 sout | nl; 124 125 for ( over( iter, fred ); iter | f; ) { 125 126 delete( &f ); 126 127 } … … 142 143 143 144 Queue(Mary) mary; 144 QueueIter(Mary) maryIter = { mary };145 QueueIter(Mary) iter = { mary }; 145 146 Mary & m; 146 147 147 for ( ; maryIter >>m; ) { // empty list148 for ( ; iter | m; ) { // empty list 148 149 sout | m.i | m.j | ' '; 149 150 } … … 156 157 sout | head( mary ).i | tail( mary ).i | nl; 157 158 158 for ( QueueIter(Mary) iter = { mary }; iter >>m; ) {159 for ( QueueIter(Mary) iter = { mary }; iter | m; ) { 159 160 sout | m.i | m.j | ' '; 160 161 } … … 165 166 } 166 167 167 for ( over( maryIter, mary ); maryIter >>m; ) {168 for ( over( iter, mary ); iter | m; ) { 168 169 sout | m.i | m.j | ' '; 169 170 } … … 174 175 } 175 176 176 Mary * head = new( -1 ), tail = { - 1};177 Mary * head = new( -1 ), tail = { -2 }; 177 178 addHead( mary, *head ); 178 179 addTail( mary, tail ); 180 179 181 sout | head( mary ).i | succ( mary, head )->i | tail( mary ).i | nl; 182 183 for ( over( iter, mary ); iter | m; ) { 184 sout | m.i | m.j | ' '; 185 } 186 sout | nl; 187 180 188 remove( mary, *head ); 181 189 remove( mary, tail ); … … 183 191 delete( &dropTail( mary ) ); 184 192 185 for ( over( maryIter, mary ); maryIter >> m; ) { 186 sout | m.i | m.j | ' '; 187 } 188 sout | nl; 189 190 for ( over( maryIter, mary ); maryIter >> m; ) { 193 for ( over( iter, mary ); iter | m; ) { 194 sout | m.i | m.j | ' '; 195 } 196 sout | nl; 197 198 for ( i; 5 ) { 199 delete( &dropTail( mary ) ); 200 } 201 for ( over( iter, mary ); iter | m; ) { 202 sout | m.i | m.j | ' '; 203 } 204 sout | nl; 205 206 for ( over( iter, mary ); iter | m; ) { 191 207 delete( &remove( mary, m ) ); 192 208 } 209 for ( over( iter, mary ); iter | m; ) { 210 sout | m.i | m.j | ' '; 211 } 212 sout | "empty" | nl; 193 213 194 214 Mary & middle; … … 199 219 } 200 220 } 201 for ( QueueIter(Mary) iter = { mary }; iter >>m; ) {221 for ( QueueIter(Mary) iter = { mary }; iter | m; ) { 202 222 sout | m.i | m.j | ' '; 203 223 } … … 208 228 split( mary2, mary, middle ); 209 229 210 for ( over( maryIter, mary ); maryIter >>m; ) {211 sout | m.i | m.j | ' '; 212 } 213 sout | nl; 214 for ( over( maryIter, mary2 ); maryIter >>m; ) {230 for ( over( iter, mary ); iter | m; ) { 231 sout | m.i | m.j | ' '; 232 } 233 sout | nl; 234 for ( over( iter, mary2 ); iter | m; ) { 215 235 sout | m.i | m.j | ' '; 216 236 } … … 219 239 transfer( mary, mary2 ); 220 240 221 for ( over( maryIter, mary ); maryIter >> m; ) { 222 sout | m.i | m.j | ' '; 223 } 224 sout | nl; 225 for ( over( maryIter, mary ); maryIter >> m; ) { 241 for ( over( iter, mary ); iter | m; ) { 242 sout | m.i | m.j | ' '; 243 } 244 sout | nl; 245 246 for ( over( iter, mary ); iter | m; ) { 226 247 delete( &m ); 227 248 } -
TabularUnified tests/collections/sequence.cfa ¶
rb6460bf r3e36f220 22 22 23 23 Sequence(Fred) fred; 24 SeqIter(Fred) fredIter = { fred };24 SeqIter(Fred) iter = { fred }; 25 25 Fred & f; 26 26 27 27 sout | nlOff; // turn off auto newline 28 28 29 for ( ; fredIter >>f; ) { // empty list29 for ( ; iter | f; ) { // empty list 30 30 sout | f.i | ' '; 31 31 } … … 38 38 sout | head( fred ).i | tail( fred ).i | nl; 39 39 40 for ( SeqIter(Fred) iter = { fred }; iter >>f; ) {40 for ( SeqIter(Fred) iter = { fred }; iter | f; ) { 41 41 sout | f.i | ' '; 42 42 } … … 47 47 } 48 48 49 for ( over( fredIter, fred ); fredIter >>f; ) {49 for ( over( iter, fred ); iter | f; ) { 50 50 sout | f.i | ' '; 51 51 } … … 61 61 62 62 sout | head( fred ).i | succ( fred, head )->i | tail( fred ).i | nl; 63 for ( over( fredIter, fred ); fredIter >> f; ) { 63 64 for ( over( iter, fred ); iter | f; ) { 64 65 sout | f.i | ' '; 65 66 } … … 71 72 delete( &dropTail( fred ) ); 72 73 73 for ( over( fredIter, fred ); fredIter >>f; ) {74 for ( over( iter, fred ); iter | f; ) { 74 75 sout | f.i | ' '; 75 76 } … … 79 80 delete( &dropTail( fred ) ); 80 81 } 81 for ( over( fredIter, fred ); fredIter >>f; ) {82 sout | f.i | ' '; 83 } 84 sout | nl; 85 86 for ( over( fredIter, fred ); fredIter >>f; ) {82 for ( over( iter, fred ); iter | f; ) { 83 sout | f.i | ' '; 84 } 85 sout | nl; 86 87 for ( over( iter, fred ); iter | f; ) { 87 88 delete( &remove( fred, f ) ); 88 89 } 89 for ( over( fredIter, fred ); fredIter >>f; ) {90 for ( over( iter, fred ); iter | f; ) { 90 91 sout | f.i | ' '; 91 92 } … … 94 95 Fred & middle; 95 96 for ( i; 10 ) { 96 addHead( fred, *new( i ) ); // reverse o der97 addHead( fred, *new( i ) ); // reverse order 97 98 if ( i == 5 ) { 98 99 &middle = &head( fred ); 99 100 } 100 101 } 101 for ( SeqIterRev(Fred) iter = { fred }; iter >>f; ) {102 for ( SeqIterRev(Fred) riter = { fred }; riter | f; ) { 102 103 sout | f.i | ' '; 103 104 } … … 109 110 110 111 sout | head( fred ).i | succ( fred, head )->i | tail( fred ).i | nl; 111 for ( over( fredIter, fred ); fredIter >>f; ) {112 for ( over( iter, fred ); iter | f; ) { 112 113 sout | f.i | ' '; 113 114 } … … 119 120 delete( &dropTail( fred ) ); 120 121 121 for ( over( fredIter, fred ); fredIter >>f; ) {122 for ( over( iter, fred ); iter | f; ) { 122 123 sout | f.i | ' '; 123 124 } … … 128 129 split( fred2, fred, middle ); 129 130 130 for ( over( fredIter, fred ); fredIter >>f; ) {131 sout | f.i | ' '; 132 } 133 sout | nl; 134 135 for ( over( fredIter, fred2 ); fredIter >>f; ) {131 for ( over( iter, fred ); iter | f; ) { 132 sout | f.i | ' '; 133 } 134 sout | nl; 135 136 for ( over( iter, fred2 ); iter | f; ) { 136 137 sout | f.i | ' '; 137 138 } … … 140 141 transfer( fred, fred2 ); 141 142 142 for ( over( fredIter, fred ); fredIter >>f; ) {143 sout | f.i | ' '; 144 } 145 sout | nl; 146 147 for ( over( fredIter, fred ); fredIter >>f; ) {143 for ( over( iter, fred ); iter | f; ) { 144 sout | f.i | ' '; 145 } 146 sout | nl; 147 148 for ( over( iter, fred ); iter | f; ) { 148 149 delete( &f ); 149 150 } … … 168 169 169 170 Sequence(Mary) mary; 170 SeqIter(Mary) maryIter = { mary };171 SeqIter(Mary) iter = { mary }; 171 172 Mary & m; 172 173 173 for ( ; maryIter >>m; ) { // empty list174 for ( ; iter | m; ) { // empty list 174 175 sout | m.i | m.j | ' '; 175 176 } … … 182 183 sout | head( mary ).i | tail( mary ).i | nl; 183 184 184 for ( SeqIter(Mary) iter = { mary }; iter >>m; ) {185 for ( SeqIter(Mary) iter = { mary }; iter | m; ) { 185 186 sout | m.i | m.j | ' '; 186 187 } … … 191 192 } 192 193 193 for ( over( maryIter, mary ); maryIter >>m; ) {194 for ( over( iter, mary ); iter | m; ) { 194 195 sout | m.i | m.j | ' '; 195 196 } … … 200 201 } 201 202 202 Mary * head = new( -1 ), tail = { - 1};203 Mary * head = new( -1 ), tail = { -2 }; 203 204 addHead( mary, *head ); 204 205 addTail( mary, tail ); 206 205 207 sout | head( mary ).i | succ( mary, head )->i | tail( mary ).i | nl; 208 209 for ( over( iter, mary ); iter | m; ) { 210 sout | m.i | m.j | ' '; 211 } 212 sout | nl; 213 206 214 remove( mary, *head ); 207 215 remove( mary, tail ); … … 209 217 delete( &dropTail( mary ) ); 210 218 211 for ( over( maryIter, mary ); maryIter >> m; ) { 212 sout | m.i | m.j | ' '; 213 } 214 sout | nl; 215 216 for ( over( maryIter, mary ); maryIter >> m; ) { 219 for ( over( iter, mary ); iter | m; ) { 220 sout | m.i | m.j | ' '; 221 } 222 sout | nl; 223 224 for ( i; 5 ) { 225 delete( &dropTail( mary ) ); 226 } 227 for ( over( iter, mary ); iter | m; ) { 228 sout | m.i | m.j | ' '; 229 } 230 sout | nl; 231 232 for ( over( iter, mary ); iter | m; ) { 217 233 delete( &remove( mary, m ) ); 218 234 } 235 for ( over( iter, mary ); iter | m; ) { 236 sout | m.i | m.j | ' '; 237 } 238 sout | "empty" | nl; 219 239 220 240 Mary & middle; … … 225 245 } 226 246 } 227 for ( SeqIter(Mary) iter = { mary }; iter >>m; ) {247 for ( SeqIter(Mary) iter = { mary }; iter | m; ) { 228 248 sout | m.i | m.j | ' '; 229 249 } … … 234 254 split( mary2, mary, middle ); 235 255 236 for ( over( maryIter, mary ); maryIter >>m; ) {237 sout | m.i | m.j | ' '; 238 } 239 sout | nl; 240 for ( over( maryIter, mary2 ); maryIter >>m; ) {256 for ( over( iter, mary ); iter | m; ) { 257 sout | m.i | m.j | ' '; 258 } 259 sout | nl; 260 for ( over( iter, mary2 ); iter | m; ) { 241 261 sout | m.i | m.j | ' '; 242 262 } … … 245 265 transfer( mary, mary2 ); 246 266 247 for ( over( maryIter, mary ); maryIter >> m; ) { 248 sout | m.i | m.j | ' '; 249 } 250 sout | nl; 251 for ( over( maryIter, mary ); maryIter >> m; ) { 267 for ( over( iter, mary ); iter | m; ) { 268 sout | m.i | m.j | ' '; 269 } 270 sout | nl; 271 272 for ( over( iter, mary ); iter | m; ) { 252 273 delete( &m ); 253 274 } -
TabularUnified tests/collections/stack.cfa ¶
rb6460bf r3e36f220 19 19 20 20 Stack(Fred) fred; 21 StackIter(Fred) fredIter = { fred };21 StackIter(Fred) inter = { fred }; 22 22 Fred & f; 23 23 24 24 sout | nlOff; // turn off auto newline 25 25 26 for ( ; fredIter >>f; ) { // empty list26 for ( ; inter | f; ) { // empty list 27 27 sout | f.i | ' '; 28 28 } … … 33 33 } 34 34 35 for ( StackIter(Fred) iter = { fred }; iter >>f; ) {35 for ( StackIter(Fred) iter = { fred }; iter | f; ) { 36 36 sout | f.i | ' '; 37 37 } … … 44 44 } 45 45 46 for ( over( fredIter, fred ); fredIter >>f; ) {46 for ( over( inter, fred ); inter | f; ) { 47 47 sout | f.i | ' '; 48 48 } … … 52 52 push( fred, *new( 2 * i + 1 ) ); 53 53 } 54 for ( over( fredIter, fred ); fredIter >>f; ) {54 for ( over( inter, fred ); inter | f; ) { 55 55 sout | f.i | ' '; 56 56 } 57 57 sout | nl; 58 58 59 for ( over( fredIter, fred ); fredIter >>f; ) {59 for ( over( inter, fred ); inter | f; ) { 60 60 delete( &f ); 61 61 } … … 81 81 Mary & m; 82 82 83 for ( ; maryIter >>m; ) { // empty list83 for ( ; maryIter | m; ) { // empty list 84 84 sout | m.i | m.j | ' '; 85 85 } … … 90 90 } 91 91 92 for ( StackIter(Mary) iter = { mary }; iter >>m; ) {92 for ( StackIter(Mary) iter = { mary }; iter | m; ) { 93 93 sout | m.i | m.j | ' '; 94 94 } … … 99 99 } 100 100 101 for ( over( maryIter, mary ); maryIter >>m; ) {101 for ( over( maryIter, mary ); maryIter | m; ) { 102 102 sout | m.i | m.j | ' '; 103 103 } … … 107 107 push( mary, *new( 2 * i + 1 ) ); 108 108 } 109 for ( over( maryIter, mary ); maryIter >>m; ) {109 for ( over( maryIter, mary ); maryIter | m; ) { 110 110 sout | m.i | m.j | ' '; 111 111 } 112 112 sout | nl; 113 113 114 for ( over( maryIter, mary ); maryIter >>m; ) {114 for ( over( maryIter, mary ); maryIter | m; ) { 115 115 delete( &m ); 116 116 }
Note: See TracChangeset
for help on using the changeset viewer.