| 
            Last change
 on this file since 1725989 was             5546f50b, checked in by Peter A. Buhr <pabuhr@…>, 20 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 | 
 | 
|---|
| 10 | forall( [N] ) // array bound
 | 
|---|
| 11 | array(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 | 
 | 
|---|
| 30 | int 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
 | 
|---|
| 46 | result: true true true false false
 | 
|---|
| 47 | $\$$ ./a.out 7
 | 
|---|
| 48 | result: true true true false false false false
 | 
|---|
| 49 | */
 | 
|---|
| 50 | 
 | 
|---|
| 51 | void 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
 | 
|---|
| 60 | forall( [M], [N] )
 | 
|---|
| 61 | void 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 | 
 | 
|---|
| 70 | forall( [M], [N] )
 | 
|---|
| 71 | void 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.