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

ADTarm-ehast-experimentalenumforall-pointer-decayjacob/cs343-translationnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since 6d1790c was 5e82d56, checked in by Peter A. Buhr <pabuhr@…>, 3 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.