kou commented on code in PR #39158:
URL: https://github.com/apache/arrow/pull/39158#discussion_r1421561642
##########
cpp/src/arrow/compute/kernels/base_arithmetic_internal.h:
##########
@@ -426,6 +426,45 @@ struct DivideChecked {
}
};
+struct FloatingDivide {
+ template <typename T, typename Arg0, typename Arg1>
+ static enable_if_floating_value<Arg0> Call(KernelContext*, Arg0 left, Arg1
right,
+ Status*) {
+ return left / right;
+ }
+
+ template <typename T, typename Arg0, typename Arg1>
+ static enable_if_integer_value<Arg0, double> Call(KernelContext* ctx, Arg0
left,
+ Arg1 right, Status* st) {
+ static_assert(std::is_same<Arg0, Arg1>::value);
+ return Call<double>(ctx, static_cast<double>(left),
static_cast<double>(right), st);
+ }
+
+ // TODO: Add decimal
+};
+
+struct FloatingDivideChecked {
+ template <typename T, typename Arg0, typename Arg1>
+ static enable_if_integer_value<Arg0, double> Call(KernelContext* ctx, Arg0
left,
+ Arg1 right, Status* st) {
+ static_assert(std::is_same<Arg0, Arg1>::value);
+ return Call<double>(ctx, static_cast<double>(left),
static_cast<double>(right), st);
+ }
+
+ template <typename T, typename Arg0, typename Arg1>
+ static enable_if_floating_value<Arg0> Call(KernelContext*, Arg0 left, Arg1
right,
+ Status* st) {
+ static_assert(std::is_same<T, Arg0>::value && std::is_same<T,
Arg1>::value);
+ if (ARROW_PREDICT_FALSE(right == 0)) {
+ *st = Status::Invalid("divide by zero");
+ return 0;
+ }
+ return left / right;
+ }
Review Comment:
How about using the same order as `FloatingDivide` for easy to read?
(`enable_if_floating_value` -> `enable_if_integer_value` order.)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]