@@ -1306,7 +1306,7 @@ enum ArrayRep<T: ArrayValueSer> {
1306
1306
1307
1307
impl < T : ArrayValueSer > From < ArrayRep < T > > for Array < T > {
1308
1308
fn from ( rep : ArrayRep < T > ) -> Self {
1309
- match rep {
1309
+ let mut arr = match rep {
1310
1310
ArrayRep :: Scalar ( data) => Self :: new ( [ ] , [ data. into ( ) ] ) ,
1311
1311
ArrayRep :: List ( data) => {
1312
1312
let data = T :: make_data ( data) ;
@@ -1326,7 +1326,30 @@ impl<T: ArrayValueSer> From<ArrayRep<T>> for Array<T> {
1326
1326
let data = T :: make_data ( data) ;
1327
1327
Self { shape, data, meta }
1328
1328
}
1329
+ } ;
1330
+
1331
+ // Update sortedness flags
1332
+ let mut is_sorted_up = true ;
1333
+ let mut is_sorted_down = true ;
1334
+ {
1335
+ let mut rows = arr. row_slices ( ) ;
1336
+ if let Some ( mut curr) = rows. next ( ) {
1337
+ for row in rows {
1338
+ if !is_sorted_up && !is_sorted_down {
1339
+ break ;
1340
+ }
1341
+ match ArrayCmpSlice ( curr) . cmp ( & ArrayCmpSlice ( row) ) {
1342
+ Ordering :: Equal => { }
1343
+ Ordering :: Less => is_sorted_down = false ,
1344
+ Ordering :: Greater => is_sorted_up = false ,
1345
+ }
1346
+ curr = row;
1347
+ }
1348
+ }
1329
1349
}
1350
+ arr. meta . mark_sorted_up ( is_sorted_up) ;
1351
+ arr. meta . mark_sorted_down ( is_sorted_down) ;
1352
+ arr
1330
1353
}
1331
1354
}
1332
1355
@@ -1343,7 +1366,7 @@ impl<T: ArrayValueSer> From<Array<T>> for ArrayRep<T> {
1343
1366
} else {
1344
1367
inner. map_keys = map_keys;
1345
1368
}
1346
- inner. flags &= ! ArrayFlags :: BOOLEAN ;
1369
+ inner. flags = ArrayFlags :: empty ( ) ;
1347
1370
if inner != DEFAULT_META_INNER {
1348
1371
return ArrayRep :: Full (
1349
1372
arr. shape ,
0 commit comments