You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by we...@apache.org on 2017/03/26 15:01:19 UTC
arrow git commit: ARROW-712: [C++] Reimplement Array::Accept as
inline visitor
Repository: arrow
Updated Branches:
refs/heads/master fd876697f -> 6d4e86290
ARROW-712: [C++] Reimplement Array::Accept as inline visitor
Author: Wes McKinney <we...@twosigma.com>
Closes #442 from wesm/more-inline-visitors and squashes the following commits:
69af01a [Wes McKinney] Remove unused member
362dd7e [Wes McKinney] cpplint
1e56f0f [Wes McKinney] Reimplement Array::Accept as inline visitor
Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/6d4e8629
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/6d4e8629
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/6d4e8629
Branch: refs/heads/master
Commit: 6d4e862902fd56c93ae394d6bc2938a1c4d1d949
Parents: fd87669
Author: Wes McKinney <we...@twosigma.com>
Authored: Sun Mar 26 11:01:14 2017 -0400
Committer: Wes McKinney <we...@twosigma.com>
Committed: Sun Mar 26 11:01:14 2017 -0400
----------------------------------------------------------------------
cpp/src/arrow/array.cc | 58 +++++++++++++--------------------------------
cpp/src/arrow/array.h | 22 +----------------
2 files changed, 18 insertions(+), 62 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/arrow/blob/6d4e8629/cpp/src/arrow/array.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/array.cc b/cpp/src/arrow/array.cc
index f1c8bd4..cff0126 100644
--- a/cpp/src/arrow/array.cc
+++ b/cpp/src/arrow/array.cc
@@ -29,6 +29,7 @@
#include "arrow/util/bit-util.h"
#include "arrow/util/logging.h"
#include "arrow/visitor.h"
+#include "arrow/visitor_inline.h"
namespace arrow {
@@ -103,6 +104,10 @@ bool Array::RangeEquals(const Array& other, int64_t start_idx, int64_t end_idx,
return are_equal;
}
+Status Array::Validate() const {
+ return Status::OK();
+}
+
// Last two parameters are in-out parameters
static inline void ConformSliceParams(
int64_t array_offset, int64_t array_length, int64_t* offset, int64_t* length) {
@@ -117,10 +122,6 @@ std::shared_ptr<Array> Array::Slice(int64_t offset) const {
return Slice(offset, slice_length);
}
-Status Array::Validate() const {
- return Status::OK();
-}
-
NullArray::NullArray(int64_t length) : Array(null(), length, nullptr, length) {}
std::shared_ptr<Array> NullArray::Slice(int64_t offset, int64_t length) const {
@@ -426,47 +427,22 @@ std::shared_ptr<Array> DictionaryArray::Slice(int64_t offset, int64_t length) co
}
// ----------------------------------------------------------------------
-// Implement ArrayVisitor methods
-
-Status NullArray::Accept(ArrayVisitor* visitor) const {
- return visitor->Visit(*this);
-}
+// Implement Array::Accept as inline visitor
-Status BooleanArray::Accept(ArrayVisitor* visitor) const {
- return visitor->Visit(*this);
-}
+struct AcceptVirtualVisitor {
+ explicit AcceptVirtualVisitor(ArrayVisitor* visitor) : visitor(visitor) {}
-template <typename T>
-Status NumericArray<T>::Accept(ArrayVisitor* visitor) const {
- return visitor->Visit(*this);
-}
+ ArrayVisitor* visitor;
-Status BinaryArray::Accept(ArrayVisitor* visitor) const {
- return visitor->Visit(*this);
-}
-
-Status StringArray::Accept(ArrayVisitor* visitor) const {
- return visitor->Visit(*this);
-}
-
-Status FixedWidthBinaryArray::Accept(ArrayVisitor* visitor) const {
- return visitor->Visit(*this);
-}
-
-Status ListArray::Accept(ArrayVisitor* visitor) const {
- return visitor->Visit(*this);
-}
-
-Status StructArray::Accept(ArrayVisitor* visitor) const {
- return visitor->Visit(*this);
-}
-
-Status UnionArray::Accept(ArrayVisitor* visitor) const {
- return visitor->Visit(*this);
-}
+ template <typename T>
+ Status Visit(const T& array) {
+ return visitor->Visit(array);
+ }
+};
-Status DictionaryArray::Accept(ArrayVisitor* visitor) const {
- return visitor->Visit(*this);
+Status Array::Accept(ArrayVisitor* visitor) const {
+ AcceptVirtualVisitor inline_visitor(visitor);
+ return VisitArrayInline(*this, visitor);
}
// ----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/arrow/blob/6d4e8629/cpp/src/arrow/array.h
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/array.h b/cpp/src/arrow/array.h
index c73b7a8..cc0cf98 100644
--- a/cpp/src/arrow/array.h
+++ b/cpp/src/arrow/array.h
@@ -110,7 +110,7 @@ class ARROW_EXPORT Array {
/// Defaults to always returning Status::OK. This can be an expensive check.
virtual Status Validate() const;
- virtual Status Accept(ArrayVisitor* visitor) const = 0;
+ Status Accept(ArrayVisitor* visitor) const;
/// Construct a zero-copy slice of the array with the indicated offset and
/// length
@@ -151,8 +151,6 @@ class ARROW_EXPORT NullArray : public Array {
explicit NullArray(int64_t length);
- Status Accept(ArrayVisitor* visitor) const override;
-
std::shared_ptr<Array> Slice(int64_t offset, int64_t length) const override;
};
@@ -196,8 +194,6 @@ class ARROW_EXPORT NumericArray : public PrimitiveArray {
return reinterpret_cast<const value_type*>(raw_data_) + offset_;
}
- Status Accept(ArrayVisitor* visitor) const override;
-
std::shared_ptr<Array> Slice(int64_t offset, int64_t length) const override;
value_type Value(int64_t i) const { return raw_data()[i]; }
@@ -213,8 +209,6 @@ class ARROW_EXPORT BooleanArray : public PrimitiveArray {
const std::shared_ptr<Buffer>& null_bitmap = nullptr, int64_t null_count = 0,
int64_t offset = 0);
- Status Accept(ArrayVisitor* visitor) const override;
-
std::shared_ptr<Array> Slice(int64_t offset, int64_t length) const override;
bool Value(int64_t i) const {
@@ -262,8 +256,6 @@ class ARROW_EXPORT ListArray : public Array {
return raw_value_offsets_[i + 1] - raw_value_offsets_[i];
}
- Status Accept(ArrayVisitor* visitor) const override;
-
std::shared_ptr<Array> Slice(int64_t offset, int64_t length) const override;
protected:
@@ -313,8 +305,6 @@ class ARROW_EXPORT BinaryArray : public Array {
Status Validate() const override;
- Status Accept(ArrayVisitor* visitor) const override;
-
std::shared_ptr<Array> Slice(int64_t offset, int64_t length) const override;
protected:
@@ -351,8 +341,6 @@ class ARROW_EXPORT StringArray : public BinaryArray {
Status Validate() const override;
- Status Accept(ArrayVisitor* visitor) const override;
-
std::shared_ptr<Array> Slice(int64_t offset, int64_t length) const override;
};
@@ -379,8 +367,6 @@ class ARROW_EXPORT FixedWidthBinaryArray : public Array {
const uint8_t* raw_data() const { return raw_data_; }
- Status Accept(ArrayVisitor* visitor) const override;
-
std::shared_ptr<Array> Slice(int64_t offset, int64_t length) const override;
protected:
@@ -409,8 +395,6 @@ class ARROW_EXPORT StructArray : public Array {
const std::vector<std::shared_ptr<Array>>& fields() const { return children_; }
- Status Accept(ArrayVisitor* visitor) const override;
-
std::shared_ptr<Array> Slice(int64_t offset, int64_t length) const override;
protected:
@@ -450,8 +434,6 @@ class ARROW_EXPORT UnionArray : public Array {
const std::vector<std::shared_ptr<Array>>& children() const { return children_; }
- Status Accept(ArrayVisitor* visitor) const override;
-
std::shared_ptr<Array> Slice(int64_t offset, int64_t length) const override;
protected:
@@ -496,8 +478,6 @@ class ARROW_EXPORT DictionaryArray : public Array {
const DictionaryType* dict_type() { return dict_type_; }
- Status Accept(ArrayVisitor* visitor) const override;
-
std::shared_ptr<Array> Slice(int64_t offset, int64_t length) const override;
protected: