14 #include <cuda/std/type_traits>
21 namespace CUDF_EXPORT
cudf {
29 template <
typename...>
43 #define CUDF_ENABLE_IF(...) cuda::std::enable_if_t<(__VA_ARGS__)>* = nullptr
46 template <
typename L,
typename R>
47 using less_comparable = decltype(cuda::std::declval<L>() < cuda::std::declval<R>());
50 template <
typename L,
typename R>
54 template <
typename L,
typename R>
58 template <
typename L,
typename R,
typename =
void>
59 struct is_relationally_comparable_impl : cuda::std::false_type {};
61 template <
typename L,
typename R>
62 struct is_relationally_comparable_impl<L,
64 void_t<less_comparable<L, R>, greater_comparable<L, R>>>
65 : cuda::std::true_type {};
67 template <
typename L,
typename R,
typename =
void>
68 struct is_equality_comparable_impl : cuda::std::false_type {};
70 template <
typename L,
typename R>
75 template <
typename AlwaysVoid,
typename... Ts>
76 struct has_common_type_impl : cuda::std::false_type {};
78 template <
typename... Ts>
79 struct has_common_type_impl<
void_t<cuda::std::common_type_t<Ts...>>, Ts...> : cuda::std::true_type {
84 template <
typename... Ts>
88 template <
typename... Ts>
93 using is_timestamp_t = cuda::std::disjunction<cuda::std::is_same<cudf::timestamp_D, T>,
94 cuda::std::is_same<cudf::timestamp_h, T>,
95 cuda::std::is_same<cudf::timestamp_m, T>,
96 cuda::std::is_same<cudf::timestamp_s, T>,
97 cuda::std::is_same<cudf::timestamp_ms, T>,
98 cuda::std::is_same<cudf::timestamp_us, T>,
99 cuda::std::is_same<cudf::timestamp_ns, T>>;
102 template <
typename T>
103 using is_duration_t = cuda::std::disjunction<cuda::std::is_same<cudf::duration_D, T>,
104 cuda::std::is_same<cudf::duration_h, T>,
105 cuda::std::is_same<cudf::duration_m, T>,
106 cuda::std::is_same<cudf::duration_s, T>,
107 cuda::std::is_same<cudf::duration_ms, T>,
108 cuda::std::is_same<cudf::duration_us, T>,
109 cuda::std::is_same<cudf::duration_ns, T>>;
123 template <
typename L,
typename R>
126 return detail::is_relationally_comparable_impl<L, R>::value;
150 template <
typename L,
typename R>
153 return detail::is_equality_comparable_impl<L, R>::value;
172 template <
typename T>
175 return cuda::std::is_arithmetic<T>();
202 template <
typename T>
205 return cuda::std::is_integral_v<T> and not cuda::std::is_same_v<T, bool>;
227 template <
typename T>
230 return cuda::std::is_signed_v<T>;
251 template <
typename T>
254 return cuda::std::is_unsigned_v<T>;
274 template <
typename Iterator>
277 return cuda::std::is_signed_v<typename cuda::std::iterator_traits<Iterator>::value_type>;
287 template <
typename T>
290 return cuda::std::is_integral_v<T>;
311 template <
typename T>
314 return cuda::std::is_integral_v<T> and not cuda::std::is_same_v<T, bool>;
335 template <
typename T>
338 return cudf::is_numeric<T>() and not cuda::std::is_same_v<T, bool>;
359 template <
typename T>
362 return cuda::std::is_floating_point_v<T>;
383 template <
typename T>
386 return cuda::std::is_same_v<cuda::std::remove_cv_t<T>, std::byte>;
396 template <
typename T>
399 return cuda::std::is_same_v<T, bool>;
418 template <
typename T>
442 template <
typename T>
445 return cuda::std::is_same_v<numeric::decimal32, T> ||
446 cuda::std::is_same_v<numeric::decimal64, T> ||
447 cuda::std::is_same_v<numeric::decimal128, T> ||
448 cuda::std::is_same_v<numeric::fixed_point<int32_t, numeric::Radix::BASE_2>, T> ||
449 cuda::std::is_same_v<numeric::fixed_point<int64_t, numeric::Radix::BASE_2>, T> ||
450 cuda::std::is_same_v<numeric::fixed_point<__int128_t, numeric::Radix::BASE_2>, T>;
469 template <
typename T>
493 template <
typename T>
496 return is_duration<T>() || is_timestamp<T>();
523 template <
typename T>
526 return cudf::is_numeric<T>() or cudf::is_chrono<T>() or cudf::is_boolean<T>() or
537 template <
typename T>
540 return cuda::std::is_same_v<dictionary32, T>;
559 template <
typename T>
562 return !is_dictionary<T>() && is_relationally_comparable<T, T>();
583 template <
typename T>
588 return cudf::is_numeric<T>() || cudf::is_chrono<T>() || cudf::is_fixed_point<T>();
616 template <
typename T>
619 return cuda::std::is_same_v<T, cudf::string_view> or
620 cuda::std::is_same_v<T, cudf::dictionary32> or cuda::std::is_same_v<T, cudf::list_view> or
621 cuda::std::is_same_v<T, cudf::struct_view>;
649 template <
typename T>
652 return cuda::std::is_same_v<T, cudf::list_view> || cuda::std::is_same_v<T, cudf::struct_view>;
683 template <
typename From,
typename To>
688 template <
typename Duration1,
typename Duration2>
690 : cuda::std::is_convertible<typename cudf::detail::time_point<Duration1>::duration,
691 typename cudf::detail::time_point<Duration2>::duration> {};
Indicator for the logical data type of an element in a column.
A non-owning, immutable view of device data that is a variable length char array representing a UTF-8...
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.
bool is_dictionary(data_type type)
Indicates whether type is a dictionary data_type.
constexpr bool is_byte()
Indicates whether T is a std::byte type.
bool is_duration(data_type type)
Indicates whether type is a duration data_type.
bool is_numeric(data_type type)
Indicates whether type is a numeric data_type.
bool is_integral(data_type type)
Indicates whether type is a integral data_type.
typename detail::has_common_type_impl< void, Ts... >::type has_common_type
Checks if types have a common type.
bool is_equality_comparable(data_type type)
Checks whether data_type type supports equality comparisons.
bool is_index_type(data_type type)
Indicates whether the type type is a index type.
decltype(cuda::std::declval< L >() > cuda::std::declval< R >()) greater_comparable
Checks if two types are comparable using greater operator (i.e. >).
bool is_numeric_not_bool(data_type type)
Indicates whether type is a numeric data_type but not BOOL8.
bool is_relationally_comparable(data_type type)
Checks whether data_type type supports relational comparisons.
decltype(cuda::std::declval< L >()==cuda::std::declval< R >()) equality_comparable
Checks if two types are comparable using equality operator (i.e. ==).
cuda::std::disjunction< cuda::std::is_same< cudf::duration_D, T >, cuda::std::is_same< cudf::duration_h, T >, cuda::std::is_same< cudf::duration_m, T >, cuda::std::is_same< cudf::duration_s, T >, cuda::std::is_same< cudf::duration_ms, T >, cuda::std::is_same< cudf::duration_us, T >, cuda::std::is_same< cudf::duration_ns, T > > is_duration_t
Checks if a type is a duration type.
bool is_dictionary_key(data_type type)
Indicates whether type is a valid dictionary type.
bool is_boolean(data_type type)
Indicates whether type is a Boolean data_type.
bool is_bit_castable(data_type from, data_type to)
Indicates whether from is bit-castable to to.
bool is_compound(data_type type)
Indicates whether elements of type are compound.
constexpr bool is_rep_layout_compatible()
Indicates whether T is layout compatible with its "representation" type.
bool is_signed(data_type type)
Indicates whether type is a signed numeric data_type.
bool is_nested(data_type type)
Indicates whether type is a nested type.
decltype(cuda::std::declval< L >()< cuda::std::declval< R >()) less_comparable
Checks if two types are comparable using less operator (i.e. <).
cuda::std::disjunction< cuda::std::is_same< cudf::timestamp_D, T >, cuda::std::is_same< cudf::timestamp_h, T >, cuda::std::is_same< cudf::timestamp_m, T >, cuda::std::is_same< cudf::timestamp_s, T >, cuda::std::is_same< cudf::timestamp_ms, T >, cuda::std::is_same< cudf::timestamp_us, T >, cuda::std::is_same< cudf::timestamp_ns, T > > is_timestamp_t
Checks if a type is a timestamp type.
void void_t
Utility metafunction that maps a sequence of any types to the type void.
bool is_timestamp(data_type type)
Indicates whether type is a timestamp data_type.
bool is_floating_point(data_type type)
Indicates whether type is a floating point data_type.
bool is_unsigned(data_type type)
Indicates whether type is a unsigned numeric data_type.
constexpr bool has_common_type_v
Helper variable template for has_common_type<>::value.
bool is_integral_not_bool(data_type type)
Indicates whether type is a integral data_type and not BOOL8.
bool is_chrono(data_type type)
Indicates whether type is a chrono data_type.
bool is_fixed_point(data_type type)
Indicates whether type is a fixed point data_type.
bool is_fixed_width(data_type type)
Indicates whether elements of type are fixed-width.
constexpr CUDF_HOST_DEVICE bool is_signed_iterator()
Indicates whether the Iterator value type is unsigned.
Concrete type definitions for int32_t and int64_t timestamps in varying resolutions as durations sinc...
time_point< Duration > timestamp
A wrapper around a column of time_point in varying resolutions.
Type declarations for libcudf.
#define CUDF_HOST_DEVICE
Indicates that the function or method is usable on host and device.