source: libcfa/src/bits/stack_example.cfa@ ddcedfe

ADT arm-eh ast-experimental enum forall-pointer-decay jacob/cs343-translation new-ast-unique-expr pthread-emulation qualifiedEnum
Last change on this file since ddcedfe was 3d0560d, checked in by Peter A. Buhr <pabuhr@…>, 5 years ago

clean up all new collections and fix sequence iterator bug

  • Property mode set to 100644
File size: 1.9 KB
RevLine 
[5e82d56]1#include <fstream.hfa>
2#include <stdlib.hfa> // new, delete
3#include "stack.hfa"
4
5int main() {
6 // Fred test
7
8 struct Fred {
9 inline Colable; // Plan 9 inheritance
10 int i;
11 };
12 void ?{}( Fred & fred ) { abort(); }
13 void ?{}( Fred & fred, int p ) with( fred ) {
14 i = p;
15 }
16
17 Stack(Fred) fred;
18 StackIter(Fred) fredIter = { fred };
[3d0560d]19 Fred & f;
[5e82d56]20
21 sout | nlOff; // turn off auto newline
22
23 for ( ; fredIter >> f; ) { // empty list
[3d0560d]24 sout | f.i | ' ';
[5e82d56]25 }
26 sout | "empty" | nl;
27
[3d0560d]28 for ( i; 10 ) {
[5e82d56]29 push( fred, new( 2 * i ) );
30 }
31
[3d0560d]32 for ( StackIter(Fred) iter = { fred }; iter >> f; ) {
33 sout | f.i | ' ';
[5e82d56]34 }
35 sout | nl;
36
[3d0560d]37 for ( i; 9 ) {
[5e82d56]38 delete( pop( fred ) );
39 }
40
41 for ( over( fredIter, fred ); fredIter >> f; ) {
[3d0560d]42 sout | f.i | ' ';
[5e82d56]43 }
44 sout | nl;
45
[3d0560d]46 for ( i; 10 ) {
[5e82d56]47 push( fred, new( 2 * i + 1 ) );
48 }
49 for ( over( fredIter, fred ); fredIter >> f; ) {
[3d0560d]50 sout | f.i | ' ';
[5e82d56]51 }
52 sout | nl;
53
54 for ( over( fredIter, fred ); fredIter >> f; ) {
[3d0560d]55 delete( &f );
[5e82d56]56 }
57
58 // Mary test
59
60 struct Mary {
61 inline Fred; // Plan 9 inheritance
62 int j;
63 };
64 void ?{}( Mary & mary ) { abort(); }
65 void ?{}( Mary & mary, int p ) with( mary ) {
66 ((Fred &)mary){ p };
67 j = i = p;
68 }
69
70 Stack(Mary) mary;
71 StackIter(Mary) maryIter = { mary };
[3d0560d]72 Mary & m;
[5e82d56]73
74 for ( ; maryIter >> m; ) { // empty list
[3d0560d]75 sout | m.i | m.j | ' ';
[5e82d56]76 }
77 sout | "empty" | nl;
78
[3d0560d]79 for ( i; 10 ) {
[5e82d56]80 push( mary, new( 2 * i ) );
81 }
82
[3d0560d]83 for ( StackIter(Mary) iter = { mary }; iter >> m; ) {
84 sout | m.i | m.j | ' ';
[5e82d56]85 }
86 sout | nl;
87
[3d0560d]88 for ( i; 9 ) {
[5e82d56]89 delete( pop( mary ) );
90 }
91
92 for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]93 sout | m.i | m.j | ' ';
[5e82d56]94 }
95 sout | nl;
96
[3d0560d]97 for ( i; 10 ) {
[5e82d56]98 push( mary, new( 2 * i + 1 ) );
99 }
100 for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]101 sout | m.i | m.j | ' ';
[5e82d56]102 }
103 sout | nl;
104
105 for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]106 delete( &m );
[5e82d56]107 }
108}
109
110// Local Variables: //
111// compile-command: "cfa stack_example.cfa" //
112// End: //
Note: See TracBrowser for help on using the repository browser.