This is an automated email from the ASF dual-hosted git repository.
lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/main by this push:
new ad44e8e4e6 MINOR: [C++] Use if-constexpr to simplify
visit_data_inline.h (#34522)
ad44e8e4e6 is described below
commit ad44e8e4e669019299dc56b37d24d2976588b648
Author: Felipe Oliveira Carvalho <[email protected]>
AuthorDate: Thu Mar 9 17:01:15 2023 -0300
MINOR: [C++] Use if-constexpr to simplify visit_data_inline.h (#34522)
Authored-by: Felipe Oliveira Carvalho <[email protected]>
Signed-off-by: David Li <[email protected]>
---
cpp/src/arrow/visit_data_inline.h | 63 ++++++++++++++++-----------------------
1 file changed, 26 insertions(+), 37 deletions(-)
diff --git a/cpp/src/arrow/visit_data_inline.h
b/cpp/src/arrow/visit_data_inline.h
index 7d37698f14..6a9b32d73a 100644
--- a/cpp/src/arrow/visit_data_inline.h
+++ b/cpp/src/arrow/visit_data_inline.h
@@ -42,48 +42,37 @@ struct ArraySpanInlineVisitor<T, enable_if_has_c_type<T>> {
template <typename ValidFunc, typename NullFunc>
static Status VisitStatus(const ArraySpan& arr, ValidFunc&& valid_func,
NullFunc&& null_func) {
- const c_type* data = arr.GetValues<c_type>(1);
- auto visit_valid = [&](int64_t i) { return valid_func(data[i]); };
- return VisitBitBlocks(arr.buffers[0].data, arr.offset, arr.length,
- std::move(visit_valid),
std::forward<NullFunc>(null_func));
- }
-
- template <typename ValidFunc, typename NullFunc>
- static void VisitVoid(const ArraySpan& arr, ValidFunc&& valid_func,
- NullFunc&& null_func) {
- using c_type = typename T::c_type;
- const c_type* data = arr.GetValues<c_type>(1);
- auto visit_valid = [&](int64_t i) { valid_func(data[i]); };
- VisitBitBlocksVoid(arr.buffers[0].data, arr.offset, arr.length,
- std::move(visit_valid),
std::forward<NullFunc>(null_func));
- }
-};
-
-// Boolean
-template <>
-struct ArraySpanInlineVisitor<BooleanType> {
- using c_type = bool;
-
- template <typename ValidFunc, typename NullFunc>
- static Status VisitStatus(const ArraySpan& arr, ValidFunc&& valid_func,
- NullFunc&& null_func) {
- int64_t offset = arr.offset;
- const uint8_t* data = arr.buffers[1].data;
- return VisitBitBlocks(
- arr.buffers[0].data, offset, arr.length,
- [&](int64_t i) { return valid_func(bit_util::GetBit(data, offset +
i)); },
- std::forward<NullFunc>(null_func));
+ if constexpr (std::is_same_v<T, BooleanType>) {
+ int64_t offset = arr.offset;
+ const uint8_t* data = arr.buffers[1].data;
+ return VisitBitBlocks(
+ arr.buffers[0].data, offset, arr.length,
+ [&](int64_t i) { return valid_func(bit_util::GetBit(data, offset +
i)); },
+ std::forward<NullFunc>(null_func));
+ } else {
+ const c_type* data = arr.GetValues<c_type>(1);
+ auto visit_valid = [&](int64_t i) { return valid_func(data[i]); };
+ return VisitBitBlocks(arr.buffers[0].data, arr.offset, arr.length,
+ std::move(visit_valid),
std::forward<NullFunc>(null_func));
+ }
}
template <typename ValidFunc, typename NullFunc>
static void VisitVoid(const ArraySpan& arr, ValidFunc&& valid_func,
NullFunc&& null_func) {
- int64_t offset = arr.offset;
- const uint8_t* data = arr.buffers[1].data;
- VisitBitBlocksVoid(
- arr.buffers[0].data, offset, arr.length,
- [&](int64_t i) { valid_func(bit_util::GetBit(data, offset + i)); },
- std::forward<NullFunc>(null_func));
+ if constexpr (std::is_same_v<T, BooleanType>) {
+ int64_t offset = arr.offset;
+ const uint8_t* data = arr.buffers[1].data;
+ VisitBitBlocksVoid(
+ arr.buffers[0].data, offset, arr.length,
+ [&](int64_t i) { valid_func(bit_util::GetBit(data, offset + i)); },
+ std::forward<NullFunc>(null_func));
+ } else {
+ const c_type* data = arr.GetValues<c_type>(1);
+ auto visit_valid = [&](int64_t i) { valid_func(data[i]); };
+ VisitBitBlocksVoid(arr.buffers[0].data, arr.offset, arr.length,
+ std::move(visit_valid),
std::forward<NullFunc>(null_func));
+ }
}
};