MCPcopy Create free account
hub / github.com/TileDB-Inc/TileDB / ndrange

Method ndrange

tiledb/sm/subarray/subarray.cc:1339–1380  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1337}
1338
1339NDRange Subarray::ndrange(uint64_t range_idx) const {
1340 NDRange ret;
1341 uint64_t tmp_idx = range_idx;
1342 auto dim_num = this->dim_num();
1343 auto layout =
1344 (layout_ == Layout::UNORDERED) ?
1345 ((cell_order_ == Layout::HILBERT) ? Layout::ROW_MAJOR : cell_order_) :
1346 layout_;
1347 ret.reserve(dim_num);
1348
1349 // Unary case or GLOBAL_ORDER
1350 if (range_idx == 0 && range_num() == 1) {
1351 for (unsigned d = 0; d < dim_num; ++d)
1352 ret.emplace_back(range_subset_[d][0]);
1353 return ret;
1354 }
1355
1356 iassert(
1357 layout == Layout::ROW_MAJOR || layout == Layout::COL_MAJOR,
1358 "layout = {}",
1359 layout_str(layout));
1360
1361 // Non-unary case (range_offsets_ must be computed)
1362 if (layout == Layout::ROW_MAJOR) {
1363 iassert(!range_offsets_.empty());
1364 for (unsigned d = 0; d < dim_num; ++d) {
1365 ret.emplace_back(range_subset_[d][tmp_idx / range_offsets_[d]]);
1366 tmp_idx %= range_offsets_[d];
1367 }
1368 } else {
1369 iassert(!range_offsets_.empty());
1370 for (unsigned d = dim_num - 1;; --d) {
1371 ret.emplace_back(range_subset_[d][tmp_idx / range_offsets_[d]]);
1372 tmp_idx %= range_offsets_[d];
1373 if (d == 0)
1374 break;
1375 }
1376 std::reverse(ret.begin(), ret.end());
1377 }
1378
1379 return ret;
1380}
1381
1382NDRange Subarray::ndrange(const std::vector<uint64_t>& range_coords) const {
1383 auto dim_num = this->dim_num();

Calls 5

dim_numMethod · 0.95
reserveMethod · 0.45
emptyMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected