source: libcfa/src/bits/sequence_example.cfa@ cde1bf9

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 cde1bf9 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.6 KB
Line 
1#include <fstream.hfa>
2#include <stdlib.hfa> // new, delete
3#include "sequence.hfa"
4
5int main() {
6 // Fred test
7
8 struct Fred {
9 inline Seqable; // 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 Sequence(Fred) fred;
18 SeqIter(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 add( 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( dropHead( 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 addTail( fred, new( 2 * i + 1 ) );
49 }
50 for ( over( fredIter, fred ); fredIter >> f; ) {
51 sout | f->i | ' ';
52 }
53 sout | nl;
54
55 for ( i = 0; i < 9; i += 1 ) {
56 delete( dropTail( fred ) );
57 }
58 for ( over( fredIter, fred ); fredIter >> f; ) {
59 sout | f->i | ' ';
60 }
61 sout | nl;
62
63 for ( over( fredIter, fred ); fredIter >> f; ) {
64 delete( f );
65 }
66
67 // Mary test
68
69 struct Mary {
70 inline Fred; // Plan 9 inheritance
71 int j;
72 };
73 void ?{}( Mary & mary ) { abort(); }
74 void ?{}( Mary & mary, int p ) with( mary ) {
75 ((Fred &)mary){ p };
76 j = p;
77 }
78
79 Sequence(Mary) mary;
80 Sequence(Mary) baz;
81 SeqIter(Mary) maryIter = { mary };
82 Mary * m;
83
84 for ( ; maryIter >> m; ) { // empty list
85 sout | m->i | m->j | ' ';
86 }
87 sout | "empty" | nl;
88
89 for ( i = 0; i < 10; i += 1 ) {
90 add( mary, new( 2 * i ) );
91 add( baz, new( 2 * i ) );
92 }
93
94 for ( over( maryIter, mary ); maryIter >> m; ) {
95 sout | m->i | m->j | ' ';
96 }
97 sout | nl;
98
99 for ( i = 0; i < 9; i += 1 ) {
100 delete( dropHead( mary ) );
101 }
102
103 for ( over( maryIter, mary ); maryIter >> m; ) {
104 sout | m->i | m->j | ' ';
105 }
106 sout | nl;
107
108 for ( i = 0; i < 10; i += 1 ) {
109 addTail( mary, new( 2 * i + 1 ) );
110 }
111 for ( over( maryIter, mary ); maryIter >> m; ) {
112 sout | m->i | m->j | ' ';
113 }
114 sout | nl;
115
116 for ( i = 0; i < 9; i += 1 ) {
117 delete( dropTail( mary ) );
118 }
119 for ( over( maryIter, mary ); maryIter >> m; ) {
120 sout | m->i | m->j | ' ';
121 }
122 sout | nl;
123
124 transfer( mary, baz );
125
126 for ( over( maryIter, baz ); maryIter >> m; ) {
127 sout | m->i | m->j | ' ';
128 }
129 sout | "empty" | nl;
130
131 for ( over( maryIter, mary ); maryIter >> m; ) {
132 sout | m->i | m->j | ' ';
133 }
134 sout | nl;
135
136 for ( over( maryIter, mary ); maryIter >> m; ) {
137 delete( m );
138 }
139}
140
141// Local Variables: //
142// compile-command: "cfa sequence_example.cc" //
143// End: //
Note: See TracBrowser for help on using the repository browser.