# source:doc/theses/mike_brooks_MMath/programs/hello-array.cfa

Last change on this file was e26a842, checked in by Peter A. Buhr <pabuhr@…>, 6 days ago

update example programs

• Property mode set to `100644`
File size: 1.7 KB
Line
1#include <fstream.hfa>
2#include <stdlib.hfa>
3#include <array.hfa> // learned has to come afer stdlib, which uses the word tag
4
5// Usage:
6// ./a.out 5
7// example does an unchecked reference to argv[1]
8
9
10forall( [@N@] )                                                         \$\C{// array dimension}\$
11array( bool, @N@) & f( array( float, @N@ ) & x, array( float, @N@ ) & y ) {
12        array( bool, @N@ ) & ret = *@alloc@();  \$\C{// sizeof ret  used by alloc}\$
13        for ( i; @N@ ) {
14                ret[i] = 0.005 > 2 * (abs( x[i] - y[i] )) / (abs( x[i]) + abs(y[i] ));
15        }
16        return ret;
17}
18
19
20
21
22
23
24
25
26
27
28// TODO: standardize argv
29
30int main( int argc, char * argv[] ) {
31        const int @n@ = ato( argv[1] );                 \$\C{// deduce conversion type}\$
32        array( float, @n@ ) x, y;                               \$\C{// VLAs}\$
33        for ( i; n ) {                                                  \$\C{// initialize arrays}\$
34                x[i] = 3.14 / (i + 1);
35                y[i] = x[i] + 0.005 ;
36        }
37        array( bool, @n@ ) & result = @f( x, y )@; \$\C{// call}\$
38        sout | "result: " | nonl;                               \$\C{// print result}\$
39        for ( i; n )
40                sout | result[i] | nonl;
41        sout | nl;
42        free( &result );                                                \$\C{// free result storage}\$
43}
44/*
45\$\\$\$ ./a.out 5
46result: true true true false false
47\$\\$\$ ./a.out 7
48result: true true true false false false false
49*/
50
51void fred() {
52        array( float, @10@ ) x;
53        array( float, @20@ ) y;
54        f( x, x );
55        f( y, y );
56//      f( x, y );
57}
58
59#ifdef SHOWERR1
60forall( [M], [N] )
61void bad( array(float, M) &x, array(float, N) &y ) {
62        f( x, x );              \$\C[1.5in]{// ok}\$
63        f( y, y );              \$\C{// ok}\$
64        f( x, y );              \$\C{// error}\CRT\$
65}
66#endif
67
68
69
70forall( [M], [N] )
71void bad_fixed( array( float, M ) & x, array( float, N ) & y ) {
72        if ( M == N )
73                f( x, @(array( float, M ) &)@y ); \$\C{// cast y to matching type}\$
74}
75
76// Local Variables: //
77// compile-command: "sed -f sedcmd hello-array.cfa > ../build/tmp.cfa; cfa ../build/tmp.cfa -Wall -Wextra" //
78// End: //
Note: See TracBrowser for help on using the repository browser.