Last change
on this file since dab9fb93 was
dab9fb93,
checked in by Michael Brooks <mlbrooks@…>, 9 months ago

Accept Peter's proofreading and adjustment of examples to current syntax


Property mode set to
100644

File size:
1.4 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.