source: libcfa/src/bits/queue_example.cfa @ af333e3

ADTarm-ehast-experimentalenumforall-pointer-decayjacob/cs343-translationnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since af333e3 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.0 KB
Line 
1#include <fstream.hfa>
2#include <stdlib.hfa>                                                                   // new, delete
3#include "queue.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        Queue(Fred) fred;
18        QueueIter(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( drop( 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                add( 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        Queue(Mary) mary;
72        QueueIter(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                add( 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( drop( 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                add( 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 queue_example.cfa" //
113// End: //
Note: See TracBrowser for help on using the repository browser.