Changeset 3d0560d
- Timestamp:
- Dec 2, 2020, 12:31:42 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:
- 833ba13
- Parents:
- 4f0c520
- Location:
- libcfa/src/bits
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/bits/queue.hfa
r4f0c520 r3d0560d 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
r4f0c520 r3d0560d 17 17 Queue(Fred) fred; 18 18 QueueIter(Fred) fredIter = { fred }; 19 Fred * f; 20 int i; 19 Fred & f; 21 20 22 21 sout | nlOff; // turn off auto newline 23 22 24 23 for ( ; fredIter >> f; ) { // empty list 25 sout | f ->i | ' ';24 sout | f.i | ' '; 26 25 } 27 26 sout | "empty" | nl; 28 27 29 for ( i = 0; i < 10; i += 1) {28 for ( i; 10 ) { 30 29 add( fred, new( 2 * i ) ); 31 30 } 32 31 33 for ( over( fredIter, fred ); fredIter >> f; ) {34 sout | f ->i | ' ';32 for ( QueueIter(Fred) iter = { fred }; iter >> f; ) { 33 sout | f.i | ' '; 35 34 } 36 35 sout | nl; 37 36 38 for ( i = 0; i < 9; i += 1) {37 for ( i; 9 ) { 39 38 delete( drop( fred ) ); 40 39 } 41 40 42 41 for ( over( fredIter, fred ); fredIter >> f; ) { 43 sout | f ->i | ' ';42 sout | f.i | ' '; 44 43 } 45 44 sout | nl; 46 45 47 for ( i = 0; i < 10; i += 1) {46 for ( i; 10 ) { 48 47 add( fred, new( 2 * i + 1 ) ); 49 48 } 50 49 for ( over( fredIter, fred ); fredIter >> f; ) { 51 sout | f ->i | ' ';50 sout | f.i | ' '; 52 51 } 53 52 sout | nl; 54 53 55 54 for ( over( fredIter, fred ); fredIter >> f; ) { 56 delete( f );55 delete( &f ); 57 56 } 58 57 … … 71 70 Queue(Mary) mary; 72 71 QueueIter(Mary) maryIter = { mary }; 73 Mary *m;72 Mary & m; 74 73 75 74 for ( ; maryIter >> m; ) { // empty list 76 sout | m ->i | m->j | ' ';75 sout | m.i | m.j | ' '; 77 76 } 78 77 sout | "empty" | nl; 79 78 80 for ( i = 0; i < 10; i += 1) {79 for ( i; 10 ) { 81 80 add( mary, new( 2 * i ) ); 82 81 } 83 82 84 for ( over( maryIter, mary ); maryIter >> m; ) {85 sout | m ->i | m->j | ' ';83 for ( QueueIter(Mary) iter = { mary }; iter >> m; ) { 84 sout | m.i | m.j | ' '; 86 85 } 87 86 sout | nl; 88 87 89 for ( i = 0; i < 9; i += 1) {88 for ( i; 9 ) { 90 89 delete( drop( mary ) ); 91 90 } 92 91 93 92 for ( over( maryIter, mary ); maryIter >> m; ) { 94 sout | m ->i | m->j | ' ';93 sout | m.i | m.j | ' '; 95 94 } 96 95 sout | nl; 97 96 98 for ( i = 0; i < 10; i += 1) {97 for ( i; 10 ) { 99 98 add( mary, new( 2 * i + 1 ) ); 100 99 } 101 100 for ( over( maryIter, mary ); maryIter >> m; ) { 102 sout | m ->i | m->j | ' ';101 sout | m.i | m.j | ' '; 103 102 } 104 103 sout | nl; 105 104 106 105 for ( over( maryIter, mary ); maryIter >> m; ) { 107 delete( m );106 delete( &m ); 108 107 } 109 108 } -
libcfa/src/bits/sequence.hfa
r4f0c520 r3d0560d 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 ); 246 247 } // post: elts = null. 247 248 … … 251 252 } // post: elts = {e in s}. 252 253 253 bool ?>>?( SeqIter(T) & si, T *& tp ) with( si ) {254 bool ?>>?( SeqIter(T) & si, T && tp ) with( si ) { 254 255 if ( curr ) { 255 tp = Curr( si );256 T * n = succ( *seq, Curr( si ) );256 &tp = Curr( si ); 257 T * n = succ( *seq, Curr( si ) ); 257 258 curr = n == head( *seq ) ? 0p : n; 258 } else tp = 0p;259 return tp != 0p;259 } else &tp = 0p; 260 return &tp != 0p; 260 261 } 261 262 } // distribution … … 282 283 ((ColIter &) si){}; 283 284 seq = &s; 285 curr = tail( s ); 284 286 } // post: elts = null. 285 287 … … 289 291 } // post: elts = {e in s}. 290 292 291 bool ?>>?( SeqIterRev(T) & si, T *&tp ) with( si ) {293 bool ?>>?( SeqIterRev(T) & si, T && tp ) with( si ) { 292 294 if ( curr ) { 293 tp = Curr( si );294 T * n = pred( *seq, Curr( si ) );295 &tp = Curr( si ); 296 T * n = pred( *seq, Curr( si ) ); 295 297 curr = n == tail( *seq ) ? 0p : n; 296 } else tp = 0p;297 return tp != 0p;298 } else &tp = 0p; 299 return &tp != 0p; 298 300 } 299 301 } // distribution -
libcfa/src/bits/sequence_example.cfa
r4f0c520 r3d0560d 17 17 Sequence(Fred) fred; 18 18 SeqIter(Fred) fredIter = { fred }; 19 Fred * f; 20 int i; 19 Fred & f; 21 20 22 21 sout | nlOff; // turn off auto newline 23 22 24 23 for ( ; fredIter >> f; ) { // empty list 25 sout | f ->i | ' ';24 sout | f.i | ' '; 26 25 } 27 26 sout | "empty" | nl; 28 27 29 for ( i = 0; i < 10; i += 1) {28 for ( i; 10 ) { 30 29 add( fred, new( 2 * i ) ); 31 30 } 32 31 33 for ( over( fredIter, fred ); fredIter >> f; ) {34 sout | f ->i | ' ';32 for ( SeqIter(Fred) iter = { fred }; iter >> f; ) { 33 sout | f.i | ' '; 35 34 } 36 35 sout | nl; 37 36 38 for ( i = 0; i < 9; i += 1) {37 for ( i; 9 ) { 39 38 delete( dropHead( fred ) ); 40 39 } 41 40 42 41 for ( over( fredIter, fred ); fredIter >> f; ) { 43 sout | f ->i | ' ';42 sout | f.i | ' '; 44 43 } 45 44 sout | nl; 46 45 47 for ( i = 0; i < 10; i += 1) {46 for ( i; 10 ) { 48 47 addTail( fred, new( 2 * i + 1 ) ); 49 48 } 50 49 for ( over( fredIter, fred ); fredIter >> f; ) { 51 sout | f ->i | ' ';50 sout | f.i | ' '; 52 51 } 53 52 sout | nl; 54 53 55 for ( i = 0; i < 9; i += 1) {56 delete( dropTail( fred ) );54 for ( i; 9 ) { 55 delete( &dropTail( fred ) ); 57 56 } 58 57 for ( over( fredIter, fred ); fredIter >> f; ) { 59 sout | f ->i | ' ';58 sout | f.i | ' '; 60 59 } 61 60 sout | nl; 62 61 63 62 for ( over( fredIter, fred ); fredIter >> f; ) { 64 delete( f );63 delete( &f ); 65 64 } 66 65 … … 80 79 Sequence(Mary) baz; 81 80 SeqIter(Mary) maryIter = { mary }; 82 Mary *m;81 Mary & m; 83 82 84 83 for ( ; maryIter >> m; ) { // empty list 85 sout | m ->i | m->j | ' ';84 sout | m.i | m.j | ' '; 86 85 } 87 86 sout | "empty" | nl; 88 87 89 for ( i = 0; i < 10; i += 1) {88 for ( i; 10 ) { 90 89 add( mary, new( 2 * i ) ); 91 90 add( baz, new( 2 * i ) ); 92 91 } 93 92 94 for ( over( maryIter, mary ); maryIter >> m; ) {95 sout | m ->i | m->j | ' ';93 for ( SeqIter(Mary) iter = { mary }; iter >> m; ) { 94 sout | m.i | m.j | ' '; 96 95 } 97 96 sout | nl; 98 97 99 for ( i = 0; i < 9; i += 1) {98 for ( i; 9 ) { 100 99 delete( dropHead( mary ) ); 101 100 } 102 101 103 102 for ( over( maryIter, mary ); maryIter >> m; ) { 104 sout | m ->i | m->j | ' ';103 sout | m.i | m.j | ' '; 105 104 } 106 105 sout | nl; 107 106 108 for ( i = 0; i < 10; i += 1) {107 for ( i; 10 ) { 109 108 addTail( mary, new( 2 * i + 1 ) ); 110 109 } 111 110 for ( over( maryIter, mary ); maryIter >> m; ) { 112 sout | m ->i | m->j | ' ';111 sout | m.i | m.j | ' '; 113 112 } 114 113 sout | nl; 115 114 116 for ( i = 0; i < 9; i += 1) {117 delete( dropTail( mary ) );115 for ( i; 9 ) { 116 delete( &dropTail( mary ) ); 118 117 } 119 118 for ( over( maryIter, mary ); maryIter >> m; ) { 120 sout | m ->i | m->j | ' ';119 sout | m.i | m.j | ' '; 121 120 } 122 121 sout | nl; … … 125 124 126 125 for ( over( maryIter, baz ); maryIter >> m; ) { 127 sout | m ->i | m->j | ' ';126 sout | m.i | m.j | ' '; 128 127 } 129 128 sout | "empty" | nl; 130 129 131 130 for ( over( maryIter, mary ); maryIter >> m; ) { 132 sout | m ->i | m->j | ' ';131 sout | m.i | m.j | ' '; 133 132 } 134 133 sout | nl; 135 134 136 135 for ( over( maryIter, mary ); maryIter >> m; ) { 137 delete( m );136 delete( &m ); 138 137 } 139 138 } 140 139 141 140 // Local Variables: // 142 // compile-command: "cfa sequence_example.c c" //141 // compile-command: "cfa sequence_example.cfa" // 143 142 // End: // -
libcfa/src/bits/stack.hfa
r4f0c520 r3d0560d 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
r4f0c520 r3d0560d 17 17 Stack(Fred) fred; 18 18 StackIter(Fred) fredIter = { fred }; 19 Fred * f; 20 int i; 19 Fred & f; 21 20 22 21 sout | nlOff; // turn off auto newline 23 22 24 23 for ( ; fredIter >> f; ) { // empty list 25 sout | f ->i | ' ';24 sout | f.i | ' '; 26 25 } 27 26 sout | "empty" | nl; 28 27 29 for ( i = 0; i < 10; i += 1) {28 for ( i; 10 ) { 30 29 push( fred, new( 2 * i ) ); 31 30 } 32 31 33 for ( over( fredIter, fred ); fredIter >> f; ) {34 sout | f ->i | ' ';32 for ( StackIter(Fred) iter = { fred }; iter >> f; ) { 33 sout | f.i | ' '; 35 34 } 36 35 sout | nl; 37 36 38 for ( i = 0; i < 9; i += 1) {37 for ( i; 9 ) { 39 38 delete( pop( fred ) ); 40 39 } 41 40 42 41 for ( over( fredIter, fred ); fredIter >> f; ) { 43 sout | f ->i | ' ';42 sout | f.i | ' '; 44 43 } 45 44 sout | nl; 46 45 47 for ( i = 0; i < 10; i += 1) {46 for ( i; 10 ) { 48 47 push( fred, new( 2 * i + 1 ) ); 49 48 } 50 49 for ( over( fredIter, fred ); fredIter >> f; ) { 51 sout | f ->i | ' ';50 sout | f.i | ' '; 52 51 } 53 52 sout | nl; 54 53 55 54 for ( over( fredIter, fred ); fredIter >> f; ) { 56 delete( f );55 delete( &f ); 57 56 } 58 57 … … 71 70 Stack(Mary) mary; 72 71 StackIter(Mary) maryIter = { mary }; 73 Mary *m;72 Mary & m; 74 73 75 74 for ( ; maryIter >> m; ) { // empty list 76 sout | m ->i | m->j | ' ';75 sout | m.i | m.j | ' '; 77 76 } 78 77 sout | "empty" | nl; 79 78 80 for ( i = 0; i < 10; i += 1) {79 for ( i; 10 ) { 81 80 push( mary, new( 2 * i ) ); 82 81 } 83 82 84 for ( over( maryIter, mary ); maryIter >> m; ) {85 sout | m ->i | m->j | ' ';83 for ( StackIter(Mary) iter = { mary }; iter >> m; ) { 84 sout | m.i | m.j | ' '; 86 85 } 87 86 sout | nl; 88 87 89 for ( i = 0; i < 9; i += 1) {88 for ( i; 9 ) { 90 89 delete( pop( mary ) ); 91 90 } 92 91 93 92 for ( over( maryIter, mary ); maryIter >> m; ) { 94 sout | m ->i | m->j | ' ';93 sout | m.i | m.j | ' '; 95 94 } 96 95 sout | nl; 97 96 98 for ( i = 0; i < 10; i += 1) {97 for ( i; 10 ) { 99 98 push( mary, new( 2 * i + 1 ) ); 100 99 } 101 100 for ( over( maryIter, mary ); maryIter >> m; ) { 102 sout | m ->i | m->j | ' ';101 sout | m.i | m.j | ' '; 103 102 } 104 103 sout | nl; 105 104 106 105 for ( over( maryIter, mary ); maryIter >> m; ) { 107 delete( m );106 delete( &m ); 108 107 } 109 108 }
Note: See TracChangeset
for help on using the changeset viewer.