@@ -36,34 +36,40 @@ public Array ToJaggedArray<T>() where T : unmanaged
3636
3737 case 2 :
3838 {
39- T [ ] [ ] ret = new T [ shape [ 0 ] ] [ ] ;
39+ // Managed arrays limited to int indices
40+ if ( shape [ 0 ] > int . MaxValue || shape [ 1 ] > int . MaxValue )
41+ throw new InvalidOperationException ( "Shape dimensions exceed managed array limits for jagged array conversion." ) ;
42+
43+ T [ ] [ ] ret = new T [ ( int ) shape [ 0 ] ] [ ] ;
4044 for ( int i = 0 ; i < ret . Length ; i ++ )
41- ret [ i ] = new T [ shape [ 1 ] ] ;
45+ ret [ i ] = new T [ ( int ) shape [ 1 ] ] ;
4246
4347 for ( int i = 0 ; i < ret . Length ; i ++ )
4448 for ( int j = 0 ; j < ret [ 0 ] . Length ; j ++ )
4549 ret [ i ] [ j ] = GetAtIndex < T > ( shape . GetOffset ( i , j ) ) ;
4650
4751 return ret ;
48-
49- break ;
5052 }
5153
5254 case 3 :
5355 {
54- T [ ] [ ] [ ] ret = new T [ shape [ 0 ] ] [ ] [ ] ;
56+ // Managed arrays limited to int indices
57+ if ( shape [ 0 ] > int . MaxValue || shape [ 1 ] > int . MaxValue || shape [ 2 ] > int . MaxValue )
58+ throw new InvalidOperationException ( "Shape dimensions exceed managed array limits for jagged array conversion." ) ;
59+
60+ T [ ] [ ] [ ] ret = new T [ ( int ) shape [ 0 ] ] [ ] [ ] ;
5561 for ( int i = 0 ; i < ret . Length ; i ++ )
5662 {
57- ret [ i ] = new T [ shape [ 1 ] ] [ ] ;
63+ ret [ i ] = new T [ ( int ) shape [ 1 ] ] [ ] ;
5864 for ( int j = 0 ; j < ret [ i ] . Length ; j ++ )
59- ret [ i ] [ j ] = new T [ shape [ 2 ] ] ;
65+ ret [ i ] [ j ] = new T [ ( int ) shape [ 2 ] ] ;
6066 }
6167
62- for ( int i = 0 ; i < shape [ 0 ] ; i ++ )
68+ for ( int i = 0 ; i < ret . Length ; i ++ )
6369 {
64- for ( int j = 0 ; j < shape [ 1 ] ; j ++ )
70+ for ( int j = 0 ; j < ret [ i ] . Length ; j ++ )
6571 {
66- for ( int k = 0 ; k < shape [ 2 ] ; k ++ )
72+ for ( int k = 0 ; k < ret [ i ] [ j ] . Length ; k ++ )
6773 {
6874 ret [ i ] [ j ] [ k ] = ( T ) GetValue ( i , j , k ) ;
6975 }
@@ -75,27 +81,31 @@ public Array ToJaggedArray<T>() where T : unmanaged
7581
7682 case 4 :
7783 {
78- T [ ] [ ] [ ] [ ] ret = new T [ shape [ 0 ] ] [ ] [ ] [ ] ;
84+ // Managed arrays limited to int indices
85+ if ( shape [ 0 ] > int . MaxValue || shape [ 1 ] > int . MaxValue || shape [ 2 ] > int . MaxValue || shape [ 3 ] > int . MaxValue )
86+ throw new InvalidOperationException ( "Shape dimensions exceed managed array limits for jagged array conversion." ) ;
87+
88+ T [ ] [ ] [ ] [ ] ret = new T [ ( int ) shape [ 0 ] ] [ ] [ ] [ ] ;
7989 for ( int i = 0 ; i < ret . Length ; i ++ )
8090 {
81- ret [ i ] = new T [ shape [ 1 ] ] [ ] [ ] ;
91+ ret [ i ] = new T [ ( int ) shape [ 1 ] ] [ ] [ ] ;
8292 for ( int j = 0 ; j < ret [ i ] . Length ; j ++ )
8393 {
84- ret [ i ] [ j ] = new T [ shape [ 2 ] ] [ ] ;
85- for ( int n = 0 ; n < ret [ i ] . Length ; n ++ )
94+ ret [ i ] [ j ] = new T [ ( int ) shape [ 2 ] ] [ ] ;
95+ for ( int n = 0 ; n < ret [ i ] [ j ] . Length ; n ++ )
8696 {
87- ret [ i ] [ j ] [ n ] = new T [ shape [ 3 ] ] ;
97+ ret [ i ] [ j ] [ n ] = new T [ ( int ) shape [ 3 ] ] ;
8898 }
8999 }
90100 }
91101
92- for ( int i = 0 ; i < shape [ 0 ] ; i ++ )
102+ for ( int i = 0 ; i < ret . Length ; i ++ )
93103 {
94- for ( int j = 0 ; j < shape [ 1 ] ; j ++ )
104+ for ( int j = 0 ; j < ret [ i ] . Length ; j ++ )
95105 {
96- for ( int k = 0 ; k < shape [ 2 ] ; k ++ )
106+ for ( int k = 0 ; k < ret [ i ] [ j ] . Length ; k ++ )
97107 {
98- for ( int l = 0 ; l < shape [ 3 ] ; l ++ )
108+ for ( int l = 0 ; l < ret [ i ] [ j ] [ k ] . Length ; l ++ )
99109 {
100110 ret [ i ] [ j ] [ k ] [ l ] = ( T ) GetValue ( i , j , k , l ) ;
101111 }
@@ -108,33 +118,38 @@ public Array ToJaggedArray<T>() where T : unmanaged
108118
109119 case 5 :
110120 {
111- T [ ] [ ] [ ] [ ] [ ] ret = new T [ shape [ 0 ] ] [ ] [ ] [ ] [ ] ;
121+ // Managed arrays limited to int indices
122+ if ( shape [ 0 ] > int . MaxValue || shape [ 1 ] > int . MaxValue || shape [ 2 ] > int . MaxValue ||
123+ shape [ 3 ] > int . MaxValue || shape [ 4 ] > int . MaxValue )
124+ throw new InvalidOperationException ( "Shape dimensions exceed managed array limits for jagged array conversion." ) ;
125+
126+ T [ ] [ ] [ ] [ ] [ ] ret = new T [ ( int ) shape [ 0 ] ] [ ] [ ] [ ] [ ] ;
112127 for ( int i = 0 ; i < ret . Length ; i ++ )
113128 {
114- ret [ i ] = new T [ shape [ 1 ] ] [ ] [ ] [ ] ;
129+ ret [ i ] = new T [ ( int ) shape [ 1 ] ] [ ] [ ] [ ] ;
115130 for ( int j = 0 ; j < ret [ i ] . Length ; j ++ )
116131 {
117- ret [ i ] [ j ] = new T [ shape [ 2 ] ] [ ] [ ] ;
118- for ( int n = 0 ; n < ret [ i ] . Length ; n ++ )
132+ ret [ i ] [ j ] = new T [ ( int ) shape [ 2 ] ] [ ] [ ] ;
133+ for ( int n = 0 ; n < ret [ i ] [ j ] . Length ; n ++ )
119134 {
120- ret [ i ] [ j ] [ n ] = new T [ shape [ 3 ] ] [ ] ;
121- for ( int k = 0 ; k < ret [ i ] . Length ; k ++ )
135+ ret [ i ] [ j ] [ n ] = new T [ ( int ) shape [ 3 ] ] [ ] ;
136+ for ( int k = 0 ; k < ret [ i ] [ j ] [ n ] . Length ; k ++ )
122137 {
123- ret [ i ] [ j ] [ n ] [ k ] = new T [ shape [ 4 ] ] ;
138+ ret [ i ] [ j ] [ n ] [ k ] = new T [ ( int ) shape [ 4 ] ] ;
124139 }
125140 }
126141 }
127142 }
128143
129- for ( int i = 0 ; i < shape [ 0 ] ; i ++ )
144+ for ( int i = 0 ; i < ret . Length ; i ++ )
130145 {
131- for ( int j = 0 ; j < shape [ 1 ] ; j ++ )
146+ for ( int j = 0 ; j < ret [ i ] . Length ; j ++ )
132147 {
133- for ( int k = 0 ; k < shape [ 2 ] ; k ++ )
148+ for ( int k = 0 ; k < ret [ i ] [ j ] . Length ; k ++ )
134149 {
135- for ( int l = 0 ; l < shape [ 3 ] ; l ++ )
150+ for ( int l = 0 ; l < ret [ i ] [ j ] [ k ] . Length ; l ++ )
136151 {
137- for ( int m = 0 ; m < shape [ 4 ] ; m ++ )
152+ for ( int m = 0 ; m < ret [ i ] [ j ] [ k ] [ l ] . Length ; m ++ )
138153 {
139154 ret [ i ] [ j ] [ k ] [ l ] [ m ] = ( T ) GetValue ( i , j , k , l , m ) ;
140155 }
@@ -148,30 +163,26 @@ public Array ToJaggedArray<T>() where T : unmanaged
148163
149164 case 6 :
150165 {
151- T [ ] [ ] [ ] ret = new T [ shape [ 0 ] ] [ ] [ ] ;
166+ // NOTE: This case appears buggy - creates 3D array for 6D input
167+ // Managed arrays limited to int indices
168+ if ( shape [ 0 ] > int . MaxValue || shape [ 1 ] > int . MaxValue || shape [ 2 ] > int . MaxValue )
169+ throw new InvalidOperationException ( "Shape dimensions exceed managed array limits for jagged array conversion." ) ;
170+
171+ T [ ] [ ] [ ] ret = new T [ ( int ) shape [ 0 ] ] [ ] [ ] ;
152172 for ( int i = 0 ; i < ret . Length ; i ++ )
153173 {
154- ret [ i ] = new T [ shape [ 1 ] ] [ ] ;
174+ ret [ i ] = new T [ ( int ) shape [ 1 ] ] [ ] ;
155175 for ( int jdx = 0 ; jdx < ret [ i ] . Length ; jdx ++ )
156- ret [ i ] [ jdx ] = new T [ shape [ 2 ] ] ;
176+ ret [ i ] [ jdx ] = new T [ ( int ) shape [ 2 ] ] ;
157177 }
158178
159- for ( int i = 0 ; i < shape [ 0 ] ; i ++ )
179+ for ( int i = 0 ; i < ret . Length ; i ++ )
160180 {
161- for ( int j = 0 ; j < shape [ 1 ] ; j ++ )
181+ for ( int j = 0 ; j < ret [ i ] . Length ; j ++ )
162182 {
163- for ( int k = 0 ; k < shape [ 2 ] ; k ++ )
183+ for ( int k = 0 ; k < ret [ i ] [ j ] . Length ; k ++ )
164184 {
165- for ( int l = 0 ; l < shape [ 3 ] ; l ++ )
166- {
167- for ( int m = 0 ; m < shape [ 4 ] ; m ++ )
168- {
169- for ( int n = 0 ; n < shape [ 5 ] ; n ++ )
170- {
171- ret [ i ] [ j ] [ k ] = ( T ) GetValue ( i , j , k ) ;
172- }
173- }
174- }
185+ ret [ i ] [ j ] [ k ] = ( T ) GetValue ( i , j , k ) ;
175186 }
176187 }
177188 }
0 commit comments