18 #include <cudf/detail/iterator.cuh>
19 #include <cudf/lists/lists_column_device_view.cuh>
23 #include <cuda_runtime.h>
24 #include <thrust/iterator/counting_iterator.h>
25 #include <thrust/iterator/transform_iterator.h>
26 #include <thrust/pair.h>
28 namespace CUDF_EXPORT
cudf {
48 : lists_column(lists_column), _row_index(row_index)
51 cudf_assert(row_index >= 0 && row_index < lists_column.size() && row_index < offsets.
size() &&
54 begin_offset = offsets.
element<
size_type>(row_index + lists_column.offset());
55 cudf_assert(begin_offset >= 0 && begin_offset <= lists_column.
child().
size() &&
56 "begin_offset 超出范围。");
57 _size = offsets.
element<
size_type>(row_index + 1 + lists_column.offset()) - begin_offset;
88 cudf_assert(idx >= 0 && idx < size() &&
"idx 超出范围");
89 return begin_offset + idx;
102 return lists_column.child().element<T>(element_offset(idx));
113 cudf_assert(idx >= 0 && idx < size() &&
"索引超出范围。");
114 auto element_offset = begin_offset + idx;
115 return lists_column.child().is_null(element_offset);
123 [[nodiscard]] __device__
inline bool is_null()
const {
return lists_column.is_null(_row_index); }
149 template <
typename T>
150 struct pair_accessor;
152 template <
typename T>
153 struct pair_rep_accessor;
156 template <
typename T>
158 thrust::transform_iterator<pair_accessor<T>, thrust::counting_iterator<cudf::size_type>>;
161 template <
typename T>
163 thrust::transform_iterator<pair_rep_accessor<T>, thrust::counting_iterator<cudf::size_type>>;
181 template <
typename T>
194 template <
typename T>
219 template <
typename T>
233 template <
typename T>
241 lists_column_device_view
const& lists_column;
256 template <
typename T>
291 template <
typename T>
314 return {get_rep<T>(i), !list.
is_null(i)};
318 template <
typename R, std::enable_if_t<std::is_same_v<R, rep_type>,
void>* =
nullptr>
324 template <
typename R, std::enable_if_t<not std::is_same_v<R, rep_type>,
void>* =
nullptr>
327 return list.
element<R>(i).value();
355 if (d_column.is_null(idx))
return size_type{0};
一个不可变、非拥有、可轻松复制的设备数据视图,表示为元素列...
T element(size_type element_index) const noexcept
返回指定索引处元素的引用。
CUDF_HOST_DEVICE size_type size() const noexcept
返回列中的元素数量。
给定一个 column_device_view,此类的实例在此复合列上提供一个包装器,用于...
column_device_view offsets() const
获取底层列表列的偏移列。
size_type offset_at(size_type idx) const
获取给定行索引处的列表偏移值,同时考虑列偏移量。
column_device_view child() const
获取底层列表列的子列。
一个非拥有、不可变的设备数据视图,表示一个包含任意类型元素的列表(包括...
const_pair_rep_iterator< T > pair_rep_end() const
用于获取 list_device_view 中最后一个元素之后一个位置的 pair 迭代器。
T element(size_type idx) const
获取列表行中指定索引处的元素。
size_type element_offset(size_type idx) const
获取与指定列表索引处元素对应的列表列子列中的偏移量...
bool is_null() const
检查此列表行是否为空。
const_pair_iterator< T > pair_end() const
用于获取 list_device_view 中最后一个元素之后一个位置的 pair 迭代器。
size_type row_index() const
返回此列表在原始列表列中的行索引。
bool is_null(size_type idx) const
检查列表中指定索引处的元素是否为空。
const_pair_rep_iterator< T > pair_rep_begin() const
用于获取 list_device_view 中第一个元素的 pair 迭代器。
thrust::transform_iterator< pair_accessor< T >, thrust::counting_iterator< cudf::size_type > > const_pair_iterator
列表的 const pair 迭代器
thrust::transform_iterator< pair_rep_accessor< T >, thrust::counting_iterator< cudf::size_type > > const_pair_rep_iterator
列表的 const pair 迭代器类型
list_device_view(lists_column_device_view const &lists_column, size_type const &row_index)
从列表列和索引构造一个 list_device_view。
const_pair_iterator< T > pair_begin() const
用于获取 list_device_view 中第一个元素的 pair 迭代器。
lists_column_device_view const & get_column() const
获取包含此列表的 lists_column_device_view。
size_type size() const
获取此列表行中的元素数量。
std::conditional_t< std::is_same_v< numeric::decimal32, T >, int32_t, std::conditional_t< std::is_same_v< numeric::decimal64, T >, int64_t, std::conditional_t< std::is_same_v< numeric::decimal128, T >, __int128_t, T > >> device_storage_type_t
“返回”使用 cudf::column 时存储在设备上的对应类型
int32_t size_type
用于列和表的行索引类型。
CUDF_HOST_DEVICE auto make_list_size_iterator(detail::lists_column_device_view const &c)
创建一个迭代器,该迭代器按行索引返回列表的大小。
list_device_view 中元素的 pair 访问器
CUDF_HOST_DEVICE pair_accessor(list_device_view const &_list)
构造函数
list_device_view const & list
要访问的 list_device_view。
thrust::pair< T, bool > operator()(cudf::size_type i) const
用于访问指定索引处的 {数据, 有效性} pair 的访问器。
list_device_view 中元素的 pair rep 访问器
list_device_view const & list
正在访问其行的 list_device_view。
device_storage_type_t< T > rep_type
用于在设备上存储值的类型。
CUDF_HOST_DEVICE pair_rep_accessor(list_device_view const &_list)
构造函数
thrust::pair< rep_type, bool > operator()(cudf::size_type i) const
用于访问指定索引处的 {表示数据, 有效性} pair 的访问器。
detail::lists_column_device_view const d_column
要访问的列表列。
CUDF_HOST_DEVICE list_size_functor(detail::lists_column_device_view const &d_col)
构造函数。
size_type operator()(size_type idx)
按行索引返回列表的大小。
定义 cudf::type_id 运行时类型信息与具体 C++ 类型之间的映射。
#define CUDF_HOST_DEVICE
指示函数或方法可在主机和设备上使用。