Open3D (C++ API)  0.18.0
Loading...
Searching...
No Matches
RaggedToDense.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// Copyright (c) 2018-2023 www.open3d.org
5// SPDX-License-Identifier: MIT
6// ----------------------------------------------------------------------------
7
8#pragma once
9
10#include <tbb/parallel_for.h>
11
12namespace open3d {
13namespace ml {
14namespace impl {
15
49template <class T>
50void RaggedToDenseCPU(const T* const values,
51 const int64_t* const row_splits,
52 const size_t row_splits_size,
53 const size_t out_col_size,
54 const T* const default_value,
55 const size_t default_value_size,
56 T* out_values) {
57 tbb::parallel_for(
58 tbb::blocked_range<size_t>(0, row_splits_size - 1),
59 [&](const tbb::blocked_range<size_t>& r) {
60 for (int64_t i = r.begin(); i != r.end(); ++i) {
61 const int64_t start = row_splits[i];
62 const int64_t end = std::min(int64_t(out_col_size) + start,
63 row_splits[i + 1]);
64
65 T* out_ptr =
66 out_values + i * out_col_size * default_value_size;
67
68 std::copy(values + start * default_value_size,
69 values + end * default_value_size, out_ptr);
70
71 // fill remaining columns with the default value
72 out_ptr = out_ptr + (end - start) * default_value_size;
73 for (int64_t j = end - start; j < out_col_size;
74 ++j, out_ptr += default_value_size) {
75 std::copy(default_value,
76 default_value + default_value_size, out_ptr);
77 }
78 }
79 });
80}
81
82} // namespace impl
83} // namespace ml
84} // namespace open3d
void RaggedToDenseCPU(const T *const values, const int64_t *const row_splits, const size_t row_splits_size, const size_t out_col_size, const T *const default_value, const size_t default_value_size, T *out_values)
Definition RaggedToDense.h:50
Definition PinholeCameraIntrinsic.cpp:16