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));
+    }
   }
 };
 

Reply via email to