source: libcfa/src/bits/sequence_example.cfa @ 7c1144b

ADTarm-ehast-experimentalenumforall-pointer-decayjacob/cs343-translationnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since 7c1144b was 7c1144b, checked in by Peter A. Buhr <pabuhr@…>, 3 years ago

formatting, more switch from pointer to reference

  • Property mode set to 100644
File size: 2.4 KB
RevLine 
[5e82d56]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 };
[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 ) {
[b37515b]29                add( fred, *new( 2 * i ) );
[5e82d56]30        }
31
[3d0560d]32        for ( SeqIter(Fred) iter = { fred }; iter >> f; ) {
33                sout | f.i | ' ';
[5e82d56]34        }
35        sout | nl;
36
[3d0560d]37        for ( i; 9 ) {
[b37515b]38                delete( &dropHead( fred ) );
[5e82d56]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 ) {
[b37515b]47                addTail( fred, *new( 2 * i + 1 ) );
[5e82d56]48        }
49        for ( over( fredIter, fred ); fredIter >> f; ) {
[3d0560d]50                sout | f.i | ' ';
[5e82d56]51        }
52        sout | nl;
53
[3d0560d]54        for ( i; 9 ) {
55                delete( &dropTail( fred ) );
[5e82d56]56        }
57        for ( over( fredIter, fred ); fredIter >> f; ) {
[3d0560d]58                sout | f.i | ' ';
[5e82d56]59        }
60        sout | nl;
61
62        for ( over( fredIter, fred ); fredIter >> f; ) {
[3d0560d]63                delete( &f );
[5e82d56]64        }
65
66        // Mary test
67
68        struct Mary {
69                inline Fred;                                                                    // Plan 9 inheritance
70                int j;
71        };
72        void ?{}( Mary & mary ) { abort(); }
73        void ?{}( Mary & mary, int p ) with( mary ) {
74                ((Fred &)mary){ p };
75                j = p;
76        }
77
78        Sequence(Mary) mary;
79        Sequence(Mary) baz;
80        SeqIter(Mary) maryIter = { mary };
[3d0560d]81        Mary & m;
[5e82d56]82
83        for ( ; maryIter >> m; ) {                                                      // empty list
[3d0560d]84                sout | m.i | m.j | ' ';
[5e82d56]85        }
86        sout | "empty" | nl;
87       
[3d0560d]88        for ( i; 10 ) {
[b37515b]89                add( mary, *new( 2 * i ) );
90                add( baz, *new( 2 * i ) );
[5e82d56]91        }
92
[3d0560d]93        for ( SeqIter(Mary) iter = { mary }; iter >> m; ) {
94                sout | m.i | m.j | ' ';
[5e82d56]95        }
96        sout | nl;
97       
[3d0560d]98        for ( i; 9 ) {
[b37515b]99                delete( &dropHead( mary ) );
[5e82d56]100        }
101
102        for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]103                sout | m.i | m.j | ' ';
[5e82d56]104        }
105        sout | nl;
106       
[3d0560d]107        for ( i; 10 ) {
[b37515b]108                addTail( mary, *new( 2 * i + 1 ) );
[5e82d56]109        }
110        for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]111                sout | m.i | m.j | ' ';
[5e82d56]112        }
113        sout | nl;
114
[3d0560d]115        for ( i; 9 ) {
116                delete( &dropTail( mary ) );
[5e82d56]117        }
118        for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]119                sout | m.i | m.j | ' ';
[5e82d56]120        }
121        sout | nl;
122
123        transfer( mary, baz );
124
125        for ( over( maryIter, baz ); maryIter >> m; ) {
[3d0560d]126                sout | m.i | m.j | ' ';
[5e82d56]127        }
128        sout | "empty" | nl;
129
130        for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]131                sout | m.i | m.j | ' ';
[5e82d56]132        }
133        sout | nl;
134
135        for ( over( maryIter, mary ); maryIter >> m; ) {
[3d0560d]136                delete( &m );
[5e82d56]137        }
138}
Note: See TracBrowser for help on using the repository browser.