19 #include <cudf/detail/utilities/assert.cuh>
58 return type_id::EMPTY;
63 inline std::string operator()()
69 template <cudf::type_
id t>
70 struct id_to_type_impl {
82 template <cudf::type_
id Id>
100 template <
typename T>
102 std::conditional_t<std::is_same_v<numeric::decimal32, T>, int32_t,
103 std::conditional_t<std::is_same_v<numeric::decimal64, T>, int64_t,
104 std::conditional_t<std::is_same_v<numeric::decimal128, T>, __int128_t, T>>>;
116 template <
typename T>
119 return (
id == type_id::DECIMAL32 && std::is_same_v<T, int32_t>) ||
120 (
id == type_id::DECIMAL64 && std::is_same_v<T, int64_t>) ||
121 (
id == type_id::DECIMAL128 && std::is_same_v<T, __int128_t>) ||
id == type_to_id<T>();
132 return id == type_id::DECIMAL32 or
133 id == type_id::DECIMAL64 or
134 id == type_id::DECIMAL128;
144 #ifndef CUDF_TYPE_MAPPING
145 #define CUDF_TYPE_MAPPING(Type, Id) \
147 constexpr inline type_id type_to_id<Type>() \
152 inline std::string type_to_name::operator()<Type>() \
154 return CUDF_STRINGIFY(Type); \
157 struct id_to_type_impl<Id> { \
200 template <cudf::type_
id Id>
205 template <
typename T>
206 struct type_to_scalar_type_impl {
216 #ifndef MAP_NUMERIC_SCALAR
217 #define MAP_NUMERIC_SCALAR(Type) \
219 struct type_to_scalar_type_impl<Type> { \
220 using ScalarType = cudf::numeric_scalar<Type>; \
221 using ScalarDeviceType = cudf::numeric_scalar_device_view<Type>; \
239 struct type_to_scalar_type_impl<std::string> {
245 struct type_to_scalar_type_impl<
cudf::string_view> {
251 struct type_to_scalar_type_impl<
numeric::decimal32> {
257 struct type_to_scalar_type_impl<
numeric::decimal64> {
263 struct type_to_scalar_type_impl<
numeric::decimal128> {
269 struct type_to_scalar_type_impl<
cudf::dictionary32> {
276 struct type_to_scalar_type_impl<
cudf::list_view> {
282 struct type_to_scalar_type_impl<
cudf::struct_view> {
293 #ifndef MAP_TIMESTAMP_SCALAR
294 #define MAP_TIMESTAMP_SCALAR(Type) \
296 struct type_to_scalar_type_impl<Type> { \
297 using ScalarType = cudf::timestamp_scalar<Type>; \
298 using ScalarDeviceType = cudf::timestamp_scalar_device_view<Type>; \
314 #ifndef MAP_DURATION_SCALAR
315 #define MAP_DURATION_SCALAR(Type) \
317 struct type_to_scalar_type_impl<Type> { \
318 using ScalarType = cudf::duration_scalar<Type>; \
319 using ScalarDeviceType = cudf::duration_scalar_device_view<Type>; \
334 template <
typename T>
337 template <
typename T>
338 using scalar_device_type_t =
typename type_to_scalar_type_impl<T>::ScalarDeviceType;
434 #pragma nv_exec_check_disable
435 template <
template <cudf::type_
id>
typename IdTypeMap = id_to_type_impl,
442 switch (dtype.id()) {
444 return f.template operator()<
typename IdTypeMap<type_id::BOOL8>::type>(
445 std::forward<Ts>(args)...);
447 return f.template operator()<
typename IdTypeMap<type_id::INT8>::type>(
448 std::forward<Ts>(args)...);
450 return f.template operator()<
typename IdTypeMap<type_id::INT16>::type>(
451 std::forward<Ts>(args)...);
453 return f.template operator()<
typename IdTypeMap<type_id::INT32>::type>(
454 std::forward<Ts>(args)...);
456 return f.template operator()<
typename IdTypeMap<type_id::INT64>::type>(
457 std::forward<Ts>(args)...);
459 return f.template operator()<
typename IdTypeMap<type_id::UINT8>::type>(
460 std::forward<Ts>(args)...);
461 case type_id::UINT16:
462 return f.template operator()<
typename IdTypeMap<type_id::UINT16>::type>(
463 std::forward<Ts>(args)...);
464 case type_id::UINT32:
465 return f.template operator()<
typename IdTypeMap<type_id::UINT32>::type>(
466 std::forward<Ts>(args)...);
467 case type_id::UINT64:
468 return f.template operator()<
typename IdTypeMap<type_id::UINT64>::type>(
469 std::forward<Ts>(args)...);
470 case type_id::FLOAT32:
471 return f.template operator()<
typename IdTypeMap<type_id::FLOAT32>::type>(
472 std::forward<Ts>(args)...);
473 case type_id::FLOAT64:
474 return f.template operator()<
typename IdTypeMap<type_id::FLOAT64>::type>(
475 std::forward<Ts>(args)...);
476 case type_id::STRING:
477 return f.template operator()<
typename IdTypeMap<type_id::STRING>::type>(
478 std::forward<Ts>(args)...);
479 case type_id::TIMESTAMP_DAYS:
480 return f.template operator()<
typename IdTypeMap<type_id::TIMESTAMP_DAYS>::type>(
481 std::forward<Ts>(args)...);
482 case type_id::TIMESTAMP_SECONDS:
483 return f.template operator()<
typename IdTypeMap<type_id::TIMESTAMP_SECONDS>::type>(
484 std::forward<Ts>(args)...);
485 case type_id::TIMESTAMP_MILLISECONDS:
486 return f.template operator()<
typename IdTypeMap<type_id::TIMESTAMP_MILLISECONDS>::type>(
487 std::forward<Ts>(args)...);
488 case type_id::TIMESTAMP_MICROSECONDS:
489 return f.template operator()<
typename IdTypeMap<type_id::TIMESTAMP_MICROSECONDS>::type>(
490 std::forward<Ts>(args)...);
491 case type_id::TIMESTAMP_NANOSECONDS:
492 return f.template operator()<
typename IdTypeMap<type_id::TIMESTAMP_NANOSECONDS>::type>(
493 std::forward<Ts>(args)...);
494 case type_id::DURATION_DAYS:
495 return f.template operator()<
typename IdTypeMap<type_id::DURATION_DAYS>::type>(
496 std::forward<Ts>(args)...);
497 case type_id::DURATION_SECONDS:
498 return f.template operator()<
typename IdTypeMap<type_id::DURATION_SECONDS>::type>(
499 std::forward<Ts>(args)...);
500 case type_id::DURATION_MILLISECONDS:
501 return f.template operator()<
typename IdTypeMap<type_id::DURATION_MILLISECONDS>::type>(
502 std::forward<Ts>(args)...);
503 case type_id::DURATION_MICROSECONDS:
504 return f.template operator()<
typename IdTypeMap<type_id::DURATION_MICROSECONDS>::type>(
505 std::forward<Ts>(args)...);
506 case type_id::DURATION_NANOSECONDS:
507 return f.template operator()<
typename IdTypeMap<type_id::DURATION_NANOSECONDS>::type>(
508 std::forward<Ts>(args)...);
509 case type_id::DICTIONARY32:
510 return f.template operator()<
typename IdTypeMap<type_id::DICTIONARY32>::type>(
511 std::forward<Ts>(args)...);
513 return f.template operator()<
typename IdTypeMap<type_id::LIST>::type>(
514 std::forward<Ts>(args)...);
515 case type_id::DECIMAL32:
516 return f.template operator()<
typename IdTypeMap<type_id::DECIMAL32>::type>(
517 std::forward<Ts>(args)...);
518 case type_id::DECIMAL64:
519 return f.template operator()<
typename IdTypeMap<type_id::DECIMAL64>::type>(
520 std::forward<Ts>(args)...);
521 case type_id::DECIMAL128:
522 return f.template operator()<
typename IdTypeMap<type_id::DECIMAL128>::type>(
523 std::forward<Ts>(args)...);
524 case type_id::STRUCT:
525 return f.template operator()<
typename IdTypeMap<type_id::STRUCT>::type>(
526 std::forward<Ts>(args)...);
528 #ifndef __CUDA_ARCH__
531 CUDF_UNREACHABLE(
"Invalid type_id.");
538 template <
typename T1>
540 #pragma nv_exec_check_disable
541 template <
typename T2,
typename F,
typename... Ts>
542 CUDF_HOST_DEVICE __forceinline__ decltype(
auto) operator()(F&& f, Ts&&... args)
const
544 return f.template operator()<T1, T2>(std::forward<Ts>(args)...);
548 template <
template <cudf::type_
id>
typename IdTypeMap>
550 #pragma nv_exec_check_disable
551 template <
typename T1,
typename F,
typename... Ts>
552 CUDF_HOST_DEVICE __forceinline__ decltype(
auto) operator()(
cudf::data_type type2,
556 return type_dispatcher<IdTypeMap>(type2,
559 std::forward<Ts>(args)...);
577 #pragma nv_exec_check_disable
578 template <
template <cudf::type_
id>
typename IdTypeMap = id_to_type_impl,
typename F,
typename... Ts>
582 return type_dispatcher<IdTypeMap>(type1,
586 std::forward<Ts>(args)...);