| 183 | }; |
| 184 | |
| 185 | struct Subtract { |
| 186 | template <typename T, typename Arg0, typename Arg1> |
| 187 | static constexpr enable_if_floating_value<T> Call(KernelContext*, Arg0 left, Arg1 right, |
| 188 | Status*) { |
| 189 | static_assert(std::is_same<T, Arg0>::value && std::is_same<T, Arg1>::value, ""); |
| 190 | return left - right; |
| 191 | } |
| 192 | |
| 193 | template <typename T, typename Arg0, typename Arg1> |
| 194 | static constexpr enable_if_unsigned_integer_value<T> Call(KernelContext*, Arg0 left, |
| 195 | Arg1 right, Status*) { |
| 196 | static_assert(std::is_same<T, Arg0>::value && std::is_same<T, Arg1>::value, ""); |
| 197 | return left - right; |
| 198 | } |
| 199 | |
| 200 | template <typename T, typename Arg0, typename Arg1> |
| 201 | static constexpr enable_if_signed_integer_value<T> Call(KernelContext*, Arg0 left, |
| 202 | Arg1 right, Status*) { |
| 203 | return arrow::internal::SafeSignedSubtract(left, right); |
| 204 | } |
| 205 | |
| 206 | template <typename T, typename Arg0, typename Arg1> |
| 207 | static enable_if_decimal_value<T> Call(KernelContext*, Arg0 left, Arg1 right, Status*) { |
| 208 | return left + (-right); |
| 209 | } |
| 210 | }; |
| 211 | |
| 212 | struct SubtractChecked { |
| 213 | template <typename T, typename Arg0, typename Arg1> |
no outgoing calls