| 
            Last change
 on this file since e274264 was             a5e26821, checked in by Michael Brooks <mlbrooks@…>, 3 years ago           | 
        
        
          | 
             
Improve new-array subscripting to cover missing cases. 
 
Missing cases include acknowledging a[0] and a[1] as required uses; therefore, give them 
special overloads.  Add comments to explain why. 
 
Missing cases include test coverage of these overloads (where tests actually fail when an overload 
is missing).  Perhaps surprisingly, you need to use a lot of features at the same time for the need 
for several overloads to obtain; make test coverage go there. 
 
Also, switch thesis's demo of mutidimensional transposing/slicing to use (improved) libcfa ar 
(pseudo-)trait, in place of former ix trait.  Therefore, also port this demo to new array 
syntax.  (No changes to thesis discussion around this demo yet; these are still pending.)  All 
in, cause this thesis demo to be runnable again. 
 
           | 
        
        
          
            
              - 
Property                 mode
 set to                 
100644
               
             
           | 
        
        
          | 
            File size:
            1.3 KB
           | 
        
      
      
| Line |   | 
|---|
| 1 | #include "array.hfa"
 | 
|---|
| 2 | 
 | 
|---|
| 3 | 
 | 
|---|
| 4 | 
 | 
|---|
| 5 | 
 | 
|---|
| 6 | 
 | 
|---|
| 7 | 
 | 
|---|
| 8 | 
 | 
|---|
| 9 | 
 | 
|---|
| 10 | 
 | 
|---|
| 11 | 
 | 
|---|
| 12 | 
 | 
|---|
| 13 | 
 | 
|---|
| 14 | 
 | 
|---|
| 15 | 
 | 
|---|
| 16 | 
 | 
|---|
| 17 | 
 | 
|---|
| 18 | 
 | 
|---|
| 19 | 
 | 
|---|
| 20 | 
 | 
|---|
| 21 | 
 | 
|---|
| 22 | 
 | 
|---|
| 23 | 
 | 
|---|
| 24 | 
 | 
|---|
| 25 | 
 | 
|---|
| 26 | 
 | 
|---|
| 27 | 
 | 
|---|
| 28 | 
 | 
|---|
| 29 | 
 | 
|---|
| 30 | 
 | 
|---|
| 31 | 
 | 
|---|
| 32 | 
 | 
|---|
| 33 | 
 | 
|---|
| 34 | 
 | 
|---|
| 35 | 
 | 
|---|
| 36 | 
 | 
|---|
| 37 | 
 | 
|---|
| 38 | 
 | 
|---|
| 39 | 
 | 
|---|
| 40 | forall( [N] )
 | 
|---|
| 41 | void print1d_cstyle( array(float, N) & c );
 | 
|---|
| 42 | 
 | 
|---|
| 43 | forall( [N], C & | ar( C, float, N ) )
 | 
|---|
| 44 | void print1d( C & c );
 | 
|---|
| 45 | 
 | 
|---|
| 46 | 
 | 
|---|
| 47 | 
 | 
|---|
| 48 | 
 | 
|---|
| 49 | 
 | 
|---|
| 50 | 
 | 
|---|
| 51 | 
 | 
|---|
| 52 | 
 | 
|---|
| 53 | 
 | 
|---|
| 54 | 
 | 
|---|
| 55 | 
 | 
|---|
| 56 | 
 | 
|---|
| 57 | 
 | 
|---|
| 58 | 
 | 
|---|
| 59 | 
 | 
|---|
| 60 | forall( [N] )
 | 
|---|
| 61 | void print1d_cstyle( array(float, N) & c ) {
 | 
|---|
| 62 |     for( i; N ) {
 | 
|---|
| 63 |         printf("%.1f  ", c[i]);
 | 
|---|
| 64 |     }
 | 
|---|
| 65 |     printf("\n");
 | 
|---|
| 66 | }
 | 
|---|
| 67 | 
 | 
|---|
| 68 | 
 | 
|---|
| 69 | 
 | 
|---|
| 70 | 
 | 
|---|
| 71 | 
 | 
|---|
| 72 | 
 | 
|---|
| 73 | 
 | 
|---|
| 74 | 
 | 
|---|
| 75 | 
 | 
|---|
| 76 | 
 | 
|---|
| 77 | 
 | 
|---|
| 78 | 
 | 
|---|
| 79 | 
 | 
|---|
| 80 | forall( [N], C & | ar( C, float, N ) )
 | 
|---|
| 81 | void print1d( C & c ) {
 | 
|---|
| 82 |     for( i; N ) {
 | 
|---|
| 83 |         printf("%.1f  ", c[i]);
 | 
|---|
| 84 |     }
 | 
|---|
| 85 |     printf("\n");
 | 
|---|
| 86 | }
 | 
|---|
| 87 | 
 | 
|---|
| 88 | 
 | 
|---|
| 89 | 
 | 
|---|
| 90 | 
 | 
|---|
| 91 | 
 | 
|---|
| 92 | 
 | 
|---|
| 93 | 
 | 
|---|
| 94 | 
 | 
|---|
| 95 | 
 | 
|---|
| 96 | 
 | 
|---|
| 97 | 
 | 
|---|
| 98 | 
 | 
|---|
| 99 | 
 | 
|---|
| 100 | 
 | 
|---|
| 101 | void fill( array(float, 5, 7) & a ) {
 | 
|---|
| 102 |     for ( i; (ptrdiff_t) 5 ) {
 | 
|---|
| 103 |         for ( j; 7 ) {
 | 
|---|
| 104 |             a[i,j] = 1.0 * i + 0.1 * j;
 | 
|---|
| 105 |             printf("%.1f  ", a[i,j]);
 | 
|---|
| 106 |         }
 | 
|---|
| 107 |         printf("\n");
 | 
|---|
| 108 |     }
 | 
|---|
| 109 |     printf("\n");
 | 
|---|
| 110 | }
 | 
|---|
| 111 | 
 | 
|---|
| 112 | int main() {
 | 
|---|
| 113 | 
 | 
|---|
| 114 | 
 | 
|---|
| 115 | 
 | 
|---|
| 116 | 
 | 
|---|
| 117 | 
 | 
|---|
| 118 | 
 | 
|---|
| 119 | 
 | 
|---|
| 120 | array( float, 5, 7 ) a;
 | 
|---|
| 121 | fill(a);
 | 
|---|
| 122 | /*
 | 
|---|
| 123 | 0.0  0.1  0.2  0.3  0.4  0.5  0.6  
 | 
|---|
| 124 | 1.0  1.1  1.2  1.3  1.4  1.5  1.6  
 | 
|---|
| 125 | 2.0  2.1  2.2  2.3  2.4  2.5  2.6  
 | 
|---|
| 126 | 3.0  3.1  3.2  3.3  3.4  3.5  3.6  
 | 
|---|
| 127 | 4.0  4.1  4.2  4.3  4.4  4.5  4.6
 | 
|---|
| 128 | */
 | 
|---|
| 129 |     
 | 
|---|
| 130 | 
 | 
|---|
| 131 | 
 | 
|---|
| 132 | 
 | 
|---|
| 133 | 
 | 
|---|
| 134 | 
 | 
|---|
| 135 | 
 | 
|---|
| 136 | 
 | 
|---|
| 137 | 
 | 
|---|
| 138 | 
 | 
|---|
| 139 | 
 | 
|---|
| 140 | print1d_cstyle( a[ 2 ] );  // 2.0  2.1  2.2  2.3  2.4  2.5  2.6
 | 
|---|
| 141 | 
 | 
|---|
| 142 | 
 | 
|---|
| 143 | 
 | 
|---|
| 144 | 
 | 
|---|
| 145 | print1d( a[ 2 ] );  // 2.0  2.1  2.2  2.3  2.4  2.5  2.6
 | 
|---|
| 146 | 
 | 
|---|
| 147 | 
 | 
|---|
| 148 | 
 | 
|---|
| 149 | 
 | 
|---|
| 150 | print1d( a[ 2, all ] );  // 2.0  2.1  2.2  2.3  2.4  2.5  2.6
 | 
|---|
| 151 | print1d( a[ all, 3 ] );  // 0.3  1.3  2.3  3.3  4.3
 | 
|---|
| 152 | 
 | 
|---|
| 153 | 
 | 
|---|
| 154 | 
 | 
|---|
| 155 | print1d_cstyle( a[ 2, all ] );
 | 
|---|
| 156 | 
 | 
|---|
| 157 | 
 | 
|---|
| 158 | 
 | 
|---|
| 159 | 
 | 
|---|
| 160 | 
 | 
|---|
| 161 | 
 | 
|---|
| 162 | 
 | 
|---|
| 163 | #ifdef SHOW_ERROR_1
 | 
|---|
| 164 | 
 | 
|---|
| 165 | print1d_cstyle( a[ all, 2 ] );  // bad
 | 
|---|
| 166 | 
 | 
|---|
| 167 | #endif
 | 
|---|
| 168 | 
 | 
|---|
| 169 | }
 | 
|---|
| 170 | 
 | 
|---|
| 171 | 
 | 
|---|
| 172 | 
 | 
|---|
       
      
  Note:
 See   
TracBrowser
 for help on using the repository browser.