@@ -1126,8 +1126,10 @@ CArray_CheckFromAny(CArray *op, CArrayDescriptor *descr, int min_depth,
1126
1126
*/
1127
1127
static void
1128
1128
_print_recursive (CArray * array , CArrayIterator * iterator , int * index , int current_dim ,
1129
- int summarized , int x_summarized , int y_summarized , int notated , int has_digits )
1129
+ int summarized , int x_summarized , int y_summarized , int notated , int has_digits ,
1130
+ int max_digits )
1130
1131
{
1132
+ int offset ;
1131
1133
int i , index_jumps , j ;
1132
1134
index_jumps = ((int * )CArray_STRIDES (array ))[current_dim ] / CArray_ITEMSIZE (array );
1133
1135
@@ -1146,11 +1148,12 @@ _print_recursive(CArray * array, CArrayIterator * iterator, int * index, int cur
1146
1148
}
1147
1149
php_printf ("[" );
1148
1150
_print_recursive (array , iterator , index , current_dim + 1 , summarized ,
1149
- x_summarized , y_summarized , notated , has_digits );
1151
+ x_summarized , y_summarized , notated , has_digits , max_digits );
1150
1152
}
1151
1153
}
1152
1154
if (current_dim >= array -> ndim - 1 ) {
1153
1155
* index = * index + 1 ;
1156
+ char tmp_str_num [11 ];
1154
1157
if (array -> descriptor -> type == TYPE_INTEGER ) {
1155
1158
int * value ;
1156
1159
if (notated ) {
@@ -1162,12 +1165,18 @@ _print_recursive(CArray * array, CArrayIterator * iterator, int * index, int cur
1162
1165
} else {
1163
1166
for (i = 0 ; i < CArray_DIMS (array )[current_dim ]; i ++ ) {
1164
1167
value = (int * ) CArrayIterator_DATA (iterator );
1168
+ snprintf (tmp_str_num , 11 , "%d" , * value );
1169
+ offset = max_digits - strlen (tmp_str_num );
1170
+ for (j = 0 ; j < offset ; j ++ ) {
1171
+ php_printf (" " );
1172
+ }
1165
1173
php_printf (" %d " , * value );
1166
1174
CArrayIterator_NEXT (iterator );
1167
1175
}
1168
1176
}
1169
1177
}
1170
1178
if (array -> descriptor -> type == TYPE_DOUBLE ) {
1179
+ char tmp_str_num [320 ];
1171
1180
double * value ;
1172
1181
if (notated ) {
1173
1182
for (i = 0 ; i < CArray_DIMS (array )[current_dim ]; i ++ ) {
@@ -1179,12 +1188,22 @@ _print_recursive(CArray * array, CArrayIterator * iterator, int * index, int cur
1179
1188
if (has_digits ) {
1180
1189
for (i = 0 ; i < CArray_DIMS (array )[current_dim ]; i ++ ) {
1181
1190
value = (double * ) CArrayIterator_DATA (iterator );
1191
+ snprintf (tmp_str_num , 320 , "%.8f" , * value );
1192
+ offset = max_digits - strlen (tmp_str_num );
1193
+ for (j = 0 ; j < offset ; j ++ ) {
1194
+ php_printf (" " );
1195
+ }
1182
1196
php_printf (" %.8f " , * value );
1183
1197
CArrayIterator_NEXT (iterator );
1184
1198
}
1185
1199
} else {
1186
1200
for (i = 0 ; i < CArray_DIMS (array )[current_dim ]; i ++ ) {
1187
1201
value = IT_DDATA (iterator );
1202
+ snprintf (tmp_str_num , 320 , "%.0f" , * value );
1203
+ offset = max_digits - strlen (tmp_str_num );
1204
+ for (j = 0 ; j < offset ; j ++ ) {
1205
+ php_printf (" " );
1206
+ }
1188
1207
php_printf (" %.0f. " , * value );
1189
1208
CArrayIterator_NEXT (iterator );
1190
1209
}
@@ -1217,13 +1236,15 @@ _print_recursive(CArray * array, CArrayIterator * iterator, int * index, int cur
1217
1236
void
1218
1237
CArray_Print (CArray * array , int force_summary )
1219
1238
{
1239
+ int biggest_number_len = 0 ;
1220
1240
int i ;
1221
1241
int has_digits = 0 ;
1222
1242
int summarized = 0 ;
1223
1243
int x_summarized = 0 ;
1224
1244
int y_summarized = 0 ;
1225
1245
int notated = 0 ;
1226
1246
int start_index = 0 ;
1247
+
1227
1248
if (array -> ndim == 0 ) {
1228
1249
if (CArray_TYPE (array ) == TYPE_DOUBLE_INT ) {
1229
1250
php_printf ("%f" , DDATA (array )[0 ]);
@@ -1264,21 +1285,36 @@ CArray_Print(CArray *array, int force_summary)
1264
1285
CArrayIterator * it = CArray_NewIter (array );
1265
1286
1266
1287
if (CArray_TYPE (array ) == TYPE_DOUBLE_INT ) {
1288
+ char tmp_str_num [320 ];
1267
1289
do {
1268
1290
if ((int )IT_DDATA (it )[0 ] != IT_DDATA (it )[0 ]) {
1269
1291
has_digits = 1 ;
1270
1292
}
1271
1293
if (IT_DDATA (it )[0 ] > 99999999 ) {
1272
1294
notated = 1 ;
1273
1295
}
1296
+ if (has_digits ) {
1297
+ snprintf (tmp_str_num , 320 , "%.8f" , IT_DDATA (it )[0 ]);
1298
+ } else {
1299
+ snprintf (tmp_str_num , 320 , "%.0f" , IT_DDATA (it )[0 ]);
1300
+ }
1301
+
1302
+ if (strlen (tmp_str_num ) > biggest_number_len ) {
1303
+ biggest_number_len = strlen (tmp_str_num );
1304
+ }
1274
1305
if (notated && has_digits ) {
1275
1306
break ;
1276
1307
}
1277
1308
CArrayIterator_NEXT (it );
1278
1309
} while (CArrayIterator_NOTDONE (it ));
1279
1310
}
1280
1311
if (CArray_TYPE (array ) == TYPE_INTEGER_INT ) {
1312
+ char tmp_str_num [11 ];
1281
1313
do {
1314
+ snprintf (tmp_str_num , 11 , "%d" , IT_IDATA (it )[0 ]);
1315
+ if (strlen (tmp_str_num ) > biggest_number_len ) {
1316
+ biggest_number_len = strlen (tmp_str_num );
1317
+ }
1282
1318
if (IT_IDATA (it )[0 ] > 99999999 ) {
1283
1319
notated = 1 ;
1284
1320
break ;
@@ -1288,7 +1324,7 @@ CArray_Print(CArray *array, int force_summary)
1288
1324
}
1289
1325
1290
1326
CArrayIterator_RESET (it );
1291
- _print_recursive (array , it , & start_index , 0 , summarized , x_summarized , y_summarized , notated , has_digits );
1327
+ _print_recursive (array , it , & start_index , 0 , summarized , x_summarized , y_summarized , notated , has_digits , biggest_number_len );
1292
1328
CArrayIterator_FREE (it );
1293
1329
php_printf ("\n" );
1294
1330
}
0 commit comments