| 1446 | } |
| 1447 | |
| 1448 | void Subarray::split( |
| 1449 | unsigned splitting_dim, |
| 1450 | const ByteVecValue& splitting_value, |
| 1451 | Subarray* r1, |
| 1452 | Subarray* r2) const { |
| 1453 | iassert(r1 != nullptr); |
| 1454 | iassert(r2 != nullptr); |
| 1455 | *r1 = Subarray(array_, layout_, stats_->parent(), logger_, coalesce_ranges_); |
| 1456 | *r2 = Subarray(array_, layout_, stats_->parent(), logger_, coalesce_ranges_); |
| 1457 | |
| 1458 | auto dim_num = array_->array_schema_latest().dim_num(); |
| 1459 | |
| 1460 | Range sr1, sr2; |
| 1461 | for (unsigned d = 0; d < dim_num; ++d) { |
| 1462 | const auto& r = range_subset_[d][0]; |
| 1463 | if (d == splitting_dim) { |
| 1464 | auto dim{array_->array_schema_latest().dimension_ptr(d)}; |
| 1465 | dim->split_range(r, splitting_value, &sr1, &sr2); |
| 1466 | r1->add_range_unsafe(d, sr1); |
| 1467 | r2->add_range_unsafe(d, sr2); |
| 1468 | } else { |
| 1469 | if (!range_subset_[d].is_implicitly_initialized()) { |
| 1470 | r1->add_range_unsafe(d, r); |
| 1471 | r2->add_range_unsafe(d, r); |
| 1472 | } |
| 1473 | } |
| 1474 | } |
| 1475 | } |
| 1476 | |
| 1477 | void Subarray::split( |
| 1478 | uint64_t splitting_range, |
no test coverage detected