33 namespace CUDF_EXPORT
cudf {
58 return type_id::EMPTY;
65 struct type_to_name_impl {
72 inline std::string operator()()
78 template <cudf::type_
id t>
79 struct id_to_type_impl {
91 template <cudf::type_
id Id>
109 template <
typename T>
111 std::conditional_t<std::is_same_v<numeric::decimal32, T>, int32_t,
112 std::conditional_t<std::is_same_v<numeric::decimal64, T>, int64_t,
113 std::conditional_t<std::is_same_v<numeric::decimal128, T>, __int128_t, T>>>;
131 template <
typename T>
134 return base_type_to_id<std::remove_cv_t<T>>();
144 #ifndef CUDF_TYPE_MAPPING
145 #define CUDF_TYPE_MAPPING(Type, Id) \
147 constexpr inline type_id base_type_to_id<Type>() \
152 inline std::string type_to_name_impl::operator()<Type>() \
154 return CUDF_STRINGIFY(Type); \
157 struct id_to_type_impl<Id> { \
203 return type_id::INT8;
215 template <
typename T>
218 return (
id == type_id::DECIMAL32 && std::is_same_v<T, int32_t>) ||
219 (
id == type_id::DECIMAL64 && std::is_same_v<T, int64_t>) ||
220 (
id == type_id::DECIMAL128 && std::is_same_v<T, __int128_t>) ||
id == type_to_id<T>();
231 template <cudf::type_
id Id>
236 template <
typename T>
237 struct type_to_scalar_type_impl {
247 #ifndef MAP_NUMERIC_SCALAR
248 #define MAP_NUMERIC_SCALAR(Type) \
250 struct type_to_scalar_type_impl<Type> { \
251 using ScalarType = cudf::numeric_scalar<Type>; \
252 using ScalarDeviceType = cudf::numeric_scalar_device_view<Type>; \
270 struct type_to_scalar_type_impl<std::string> {
276 struct type_to_scalar_type_impl<
cudf::string_view> {
307 struct type_to_scalar_type_impl<
cudf::list_view> {
313 struct type_to_scalar_type_impl<
cudf::struct_view> {
324 #ifndef MAP_TIMESTAMP_SCALAR
325 #define MAP_TIMESTAMP_SCALAR(Type) \
327 struct type_to_scalar_type_impl<Type> { \
328 using ScalarType = cudf::timestamp_scalar<Type>; \
329 using ScalarDeviceType = cudf::timestamp_scalar_device_view<Type>; \
345 #ifndef MAP_DURATION_SCALAR
346 #define MAP_DURATION_SCALAR(Type) \
348 struct type_to_scalar_type_impl<Type> { \
349 using ScalarType = cudf::duration_scalar<Type>; \
350 using ScalarDeviceType = cudf::duration_scalar_device_view<Type>; \
365 template <
typename T>
373 template <
typename T>
471 #pragma nv_exec_check_disable
473 template <
template <cudf::type_
id>
typename IdTypeMap = id_to_type_impl,
480 switch (dtype.id()) {
482 return f.template operator()<
typename IdTypeMap<type_id::INT8>::type>(
483 std::forward<Ts>(args)...);
485 return f.template operator()<
typename IdTypeMap<type_id::INT16>::type>(
486 std::forward<Ts>(args)...);
488 return f.template operator()<
typename IdTypeMap<type_id::INT32>::type>(
489 std::forward<Ts>(args)...);
491 return f.template operator()<
typename IdTypeMap<type_id::INT64>::type>(
492 std::forward<Ts>(args)...);
494 return f.template operator()<
typename IdTypeMap<type_id::UINT8>::type>(
495 std::forward<Ts>(args)...);
496 case type_id::UINT16:
497 return f.template operator()<
typename IdTypeMap<type_id::UINT16>::type>(
498 std::forward<Ts>(args)...);
499 case type_id::UINT32:
500 return f.template operator()<
typename IdTypeMap<type_id::UINT32>::type>(
501 std::forward<Ts>(args)...);
502 case type_id::UINT64:
503 return f.template operator()<
typename IdTypeMap<type_id::UINT64>::type>(
504 std::forward<Ts>(args)...);
505 case type_id::FLOAT32:
506 return f.template operator()<
typename IdTypeMap<type_id::FLOAT32>::type>(
507 std::forward<Ts>(args)...);
508 case type_id::FLOAT64:
509 return f.template operator()<
typename IdTypeMap<type_id::FLOAT64>::type>(
510 std::forward<Ts>(args)...);
512 return f.template operator()<
typename IdTypeMap<type_id::BOOL8>::type>(
513 std::forward<Ts>(args)...);
514 case type_id::TIMESTAMP_DAYS:
515 return f.template operator()<
typename IdTypeMap<type_id::TIMESTAMP_DAYS>::type>(
516 std::forward<Ts>(args)...);
517 case type_id::TIMESTAMP_SECONDS:
518 return f.template operator()<
typename IdTypeMap<type_id::TIMESTAMP_SECONDS>::type>(
519 std::forward<Ts>(args)...);
520 case type_id::TIMESTAMP_MILLISECONDS:
521 return f.template operator()<
typename IdTypeMap<type_id::TIMESTAMP_MILLISECONDS>::type>(
522 std::forward<Ts>(args)...);
523 case type_id::TIMESTAMP_MICROSECONDS:
524 return f.template operator()<
typename IdTypeMap<type_id::TIMESTAMP_MICROSECONDS>::type>(
525 std::forward<Ts>(args)...);
526 case type_id::TIMESTAMP_NANOSECONDS:
527 return f.template operator()<
typename IdTypeMap<type_id::TIMESTAMP_NANOSECONDS>::type>(
528 std::forward<Ts>(args)...);
529 case type_id::DURATION_DAYS:
530 return f.template operator()<
typename IdTypeMap<type_id::DURATION_DAYS>::type>(
531 std::forward<Ts>(args)...);
532 case type_id::DURATION_SECONDS:
533 return f.template operator()<
typename IdTypeMap<type_id::DURATION_SECONDS>::type>(
534 std::forward<Ts>(args)...);
535 case type_id::DURATION_MILLISECONDS:
536 return f.template operator()<
typename IdTypeMap<type_id::DURATION_MILLISECONDS>::type>(
537 std::forward<Ts>(args)...);
538 case type_id::DURATION_MICROSECONDS:
539 return f.template operator()<
typename IdTypeMap<type_id::DURATION_MICROSECONDS>::type>(
540 std::forward<Ts>(args)...);
541 case type_id::DURATION_NANOSECONDS:
542 return f.template operator()<
typename IdTypeMap<type_id::DURATION_NANOSECONDS>::type>(
543 std::forward<Ts>(args)...);
544 case type_id::DICTIONARY32:
545 return f.template operator()<
typename IdTypeMap<type_id::DICTIONARY32>::type>(
546 std::forward<Ts>(args)...);
547 case type_id::STRING:
548 return f.template operator()<
typename IdTypeMap<type_id::STRING>::type>(
549 std::forward<Ts>(args)...);
551 return f.template operator()<
typename IdTypeMap<type_id::LIST>::type>(
552 std::forward<Ts>(args)...);
553 case type_id::DECIMAL32:
554 return f.template operator()<
typename IdTypeMap<type_id::DECIMAL32>::type>(
555 std::forward<Ts>(args)...);
556 case type_id::DECIMAL64:
557 return f.template operator()<
typename IdTypeMap<type_id::DECIMAL64>::type>(
558 std::forward<Ts>(args)...);
559 case type_id::DECIMAL128:
560 return f.template operator()<
typename IdTypeMap<type_id::DECIMAL128>::type>(
561 std::forward<Ts>(args)...);
562 case type_id::STRUCT:
563 return f.template operator()<
typename IdTypeMap<type_id::STRUCT>::type>(
564 std::forward<Ts>(args)...);
566 #ifndef __CUDA_ARCH__
569 CUDF_UNREACHABLE(
"Invalid type_id.");
577 template <
typename T1>
578 struct double_type_dispatcher_second_type {
580 #pragma nv_exec_check_disable
582 template <
typename T2,
typename F,
typename... Ts>
583 CUDF_HOST_DEVICE __forceinline__ decltype(
auto) operator()(F&& f, Ts&&... args)
const
585 return f.template operator()<T1, T2>(std::forward<Ts>(args)...);
589 template <
template <cudf::type_
id>
typename IdTypeMap>
590 struct double_type_dispatcher_first_type {
592 #pragma nv_exec_check_disable
594 template <
typename T1,
typename F,
typename... Ts>
599 return type_dispatcher<IdTypeMap>(type2,
600 detail::double_type_dispatcher_second_type<T1>{},
602 std::forward<Ts>(args)...);
624 #pragma nv_exec_check_disable
626 template <
template <cudf::type_
id>
typename IdTypeMap = id_to_type_impl,
typename F,
typename... Ts>
630 return type_dispatcher<IdTypeMap>(type1,
631 detail::double_type_dispatcher_first_type<IdTypeMap>{},
634 std::forward<Ts>(args)...);
Indicator for the logical data type of an element in a column.
A type of scalar_device_view that stores a pointer to a fixed_point value.
An owning class to represent a fixed_point number in device memory.
An owning class to represent a list value in device memory.
A non-owning, immutable view of device data that represents a list of elements of arbitrary type (inc...
A type of scalar_device_view that stores a pointer to a numerical value.
An owning class to represent a numerical value in device memory.
An owning class to represent a singular value.
A type of scalar_device_view that stores a pointer to a string value.
An owning class to represent a string in device memory.
A non-owning, immutable view of device data that is a variable length char array representing a UTF-8...
An owning class to represent a struct value in device memory.
A non-owning, immutable view of device data that represents a struct with fields of arbitrary types (...
A type for representing a number with a fixed amount of precision.
Concrete type definition for dictionary columns.
Concrete type definitions for int32_t and int64_t durations in varying resolutions.
Class definition for fixed point data type.
dictionary_wrapper< int32_t > dictionary32
32-bit integer indexed dictionary wrapper
fixed_point< int32_t, Radix::BASE_10 > decimal32
32-bit decimal fixed point
fixed_point< int64_t, Radix::BASE_10 > decimal64
64-bit decimal fixed point
fixed_point< __int128_t, Radix::BASE_10 > decimal128
128-bit decimal fixed point
detail::timestamp< cudf::duration_ms > timestamp_ms
Type alias representing a cudf::duration_ms (int64_t) since the unix epoch.
detail::timestamp< cudf::duration_s > timestamp_s
Type alias representing a cudf::duration_s (int64_t) since the unix epoch.
detail::timestamp< cudf::duration_D > timestamp_D
Type alias representing a cudf::duration_D (int32_t) since the unix epoch.
cuda::std::chrono::duration< int64_t, cuda::std::chrono::nanoseconds::period > duration_ns
Type alias representing an int64_t duration of nanoseconds.
cuda::std::chrono::duration< int32_t, cuda::std::chrono::days::period > duration_D
Type alias representing an int32_t duration of days.
cuda::std::chrono::duration< int64_t, cuda::std::chrono::milliseconds::period > duration_ms
Type alias representing an int64_t duration of milliseconds.
cuda::std::chrono::duration< int64_t, cuda::std::chrono::microseconds::period > duration_us
Type alias representing an int64_t duration of microseconds.
detail::timestamp< cudf::duration_us > timestamp_us
Type alias representing a cudf::duration_us (int64_t) since the unix epoch.
detail::timestamp< cudf::duration_ns > timestamp_ns
Type alias representing a cudf::duration_ns (int64_t) since the unix epoch.
cuda::std::chrono::duration< int64_t, cuda::std::chrono::seconds::period > duration_s
Type alias representing an int64_t duration of seconds.
#define MAP_TIMESTAMP_SCALAR(Type)
Macro used to define scalar type and scalar device type for cudf::timestamp_scalar template class for...
constexpr CUDF_HOST_DEVICE type_id base_type_to_id()
Maps a C++ type to its corresponding cudf::type_id
std::string type_to_name(data_type type)
Return a name for a given type.
#define MAP_DURATION_SCALAR(Type)
Macro used to define scalar type and scalar device type for cudf::duration_scalar template class for ...
CUDF_HOST_DEVICE constexpr decltype(auto) __forceinline__ type_dispatcher(cudf::data_type dtype, Functor f, Ts &&... args)
Invokes an operator() template with the type instantiation based on the specified cudf::data_type's i...
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
"Returns" the corresponding type that is stored on the device when using cudf::column
typename type_to_scalar_type_impl< T >::ScalarDeviceType scalar_device_type_t
Maps a C++ type to the scalar device type required to hold its value.
constexpr type_id base_type_to_id< char >()
Specialization to map 'char' type to type_id::INT8.
#define CUDF_TYPE_MAPPING(Type, Id)
Macro used to define a mapping between a concrete C++ type and a cudf::type_id enum.
typename type_to_scalar_type_impl< T >::ScalarType scalar_type_t
Maps a C++ type to the scalar type required to hold its value.
constexpr type_id type_to_id()
Maps a C++ type to its corresponding cudf::type_id
CUDF_HOST_DEVICE constexpr decltype(auto) __forceinline__ double_type_dispatcher(cudf::data_type type1, cudf::data_type type2, F &&f, Ts &&... args)
Dispatches two type template parameters to a callable.
typename id_to_type_impl< Id >::type id_to_type
Maps a cudf::type_id to its corresponding concrete C++ type.
constexpr bool type_id_matches_device_storage_type(type_id id)
Checks if fixed_point-like types have template type T matching the column's stored type id.
#define MAP_NUMERIC_SCALAR(Type)
Macro used to define scalar type and scalar device type for cudf::numeric_scalar template class for n...
#define CUDF_FAIL(...)
Indicates that an erroneous code path has been taken.
type_id
Identifies a column's logical element type.
fixed_point and supporting types
A strongly typed wrapper for indices in a DICTIONARY type column.
Use this specialization on type_dispatcher whenever you only need to operate on the underlying stored...
device_storage_type_t< id_to_type< Id > > type
The underlying type.
Concrete type definitions for int32_t and int64_t timestamps in varying resolutions as durations sinc...
Type declarations for libcudf.
#define CUDF_HOST_DEVICE
Indicates that the function or method is usable on host and device.