#include #include #include #include // setlocale forall( T, @[NprovTerty]@, @[Nmunicipalities]@ ) struct CanadaPop { array( T, @NprovTerty@ ) provTerty; $\C{// nested VLA}$ array( T, @Nmunicipalities@ ) municipalities; $\C{// nested VLA}$ int total_pt, total_mun; }; // TODO: understand (fix?) why these are needed (autogen seems to be failing ... is typeof as struct member nayok?) forall( T, [NprovTerty], [Nmunicipalities] ) void ?{}( T &, CanadaPop( T, NprovTerty, Nmunicipalities ) & this ) {} forall( T &, [NprovTerty], [Nmunicipalities] ) void ^?{}( CanadaPop( T, NprovTerty, Nmunicipalities ) & this ) {} forall( T, [NprovTerty], [Nmunicipalities] ) void check( CanadaPop( T, NprovTerty, Nmunicipalities ) & pop ) with( pop ) { total_pt = total_mun = 0; for ( i; NprovTerty ) total_pt += provTerty[i]; for ( i; Nmunicipalities ) total_mun += municipalities[i]; } int main( int argc, char * argv[] ) { const int npt = ato( argv[1] ), nmun = ato( argv[2] ); @CanadaPop( int, npt, nmun ) pop;@ // read in population numbers @check( pop );@ sout | setlocale( LC_NUMERIC, getenv( "LANG" ) ); sout | "Total province/territory:" | pop.total_pt; sout | "Total municipalities:" | pop.total_mun; } /* $\$$ ./a.out 13 3573 Total province/territory: 36,991,981 Total municipalities: 36,991,981 */ // Local Variables: // // compile-command: "sed -f sedcmd hello-accordion.cfa > ../build/tmp.cfa; cfa ../build/tmp.cfa -Wall -Wextra" // // End: //