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

Last change on this file since 5546f50b was 5546f50b, checked in by Peter A. Buhr <pabuhr@…>, 6 months ago

more switch to tabs

• Property mode set to `100644`
File size: 1.3 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] ) // array bound
11array(bool, N) & f( array(float, N) & a, array(float, N) & b ) {
12        array(bool, N) & ret = *alloc(); // sizeof used by alloc
13        for( i; N ) {
14                ret[i] = 0.005 > 2 * (abs(a[i] - b[i])) / (abs(a[i]) + abs(b[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        int n = ato( argv[1] );
32        array(float, n) a, b; // VLA
33        for ( i; n ) {
34                a[i] = 3.14 / (i + 1);
35                b[i] = a[i] + 0.005 ;
36        }
37        array(bool, n) & result = f( a, b ); // call
38        sout | "result: " | nonl;
39        for ( i; n )
40                sout | result[i] | nonl;
41        sout | nl;
42        free( &result ); // free returned 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) a;
53        array(float, 20) b;
54        f( a, a );
55        f( b, b );
56        f( a, b );
57}
58
59#ifdef SHOWERR1
60forall( [M], [N] )
61void bad( array(float, M) &a, array(float, N) &b ) {
62        f( a, a ); // ok
63        f( b, b ); // ok
64        f( a, b ); // error
65}
66#endif
67
68
69
70forall( [M], [N] )
71void bad_fixed( array(float, M) & a, array(float, N) & b ) {
72        if ( M == N ) {
73                f( a, (array(float, M) &)b ); // cast b to matching type
74        }
75}
Note: See TracBrowser for help on using the repository browser.