#include #include // new, delete #include "queue.hfa" int main() { // Fred test struct Fred { inline Colable; // Plan 9 inheritance int i; }; void ?{}( Fred & fred ) { abort(); } void ?{}( Fred & fred, int p ) with( fred ) { i = p; } Queue(Fred) fred; QueueIter(Fred) fredIter = { fred }; Fred * f; int i; sout | nlOff; // turn off auto newline for ( ; fredIter >> f; ) { // empty list sout | f->i | ' '; } sout | "empty" | nl; for ( i = 0; i < 10; i += 1 ) { add( fred, new( 2 * i ) ); } for ( over( fredIter, fred ); fredIter >> f; ) { sout | f->i | ' '; } sout | nl; for ( i = 0; i < 9; i += 1 ) { delete( drop( fred ) ); } for ( over( fredIter, fred ); fredIter >> f; ) { sout | f->i | ' '; } sout | nl; for ( i = 0; i < 10; i += 1 ) { add( fred, new( 2 * i + 1 ) ); } for ( over( fredIter, fred ); fredIter >> f; ) { sout | f->i | ' '; } sout | nl; for ( over( fredIter, fred ); fredIter >> f; ) { delete( f ); } // Mary test struct Mary { inline Fred; // Plan 9 inheritance int j; }; void ?{}( Mary & mary ) { abort(); } void ?{}( Mary & mary, int p ) with( mary ) { ((Fred &)mary){ p }; j = i = p; } Queue(Mary) mary; QueueIter(Mary) maryIter = { mary }; Mary * m; for ( ; maryIter >> m; ) { // empty list sout | m->i | m->j | ' '; } sout | "empty" | nl; for ( i = 0; i < 10; i += 1 ) { add( mary, new( 2 * i ) ); } for ( over( maryIter, mary ); maryIter >> m; ) { sout | m->i | m->j | ' '; } sout | nl; for ( i = 0; i < 9; i += 1 ) { delete( drop( mary ) ); } for ( over( maryIter, mary ); maryIter >> m; ) { sout | m->i | m->j | ' '; } sout | nl; for ( i = 0; i < 10; i += 1 ) { add( mary, new( 2 * i + 1 ) ); } for ( over( maryIter, mary ); maryIter >> m; ) { sout | m->i | m->j | ' '; } sout | nl; for ( over( maryIter, mary ); maryIter >> m; ) { delete( m ); } } // Local Variables: // // compile-command: "cfa queue_example.cfa" // // End: //