source: libcfa/src/bits/stack_example.cfa@ 6d1790c

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 6d1790c was 5e82d56, checked in by Peter A. Buhr <pabuhr@…>, 5 years ago

temporary collection types for testing

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