You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by uw...@apache.org on 2017/04/20 07:36:26 UTC
arrow git commit: ARROW-860: [C++] Remove typed Tensor containers
Repository: arrow
Updated Branches:
refs/heads/master 0dc6fe8f3 -> a68f31b0f
ARROW-860: [C++] Remove typed Tensor containers
cc @kou for opinions -- this patch breaks glib for the moment. Since tensors are all fixed width types, there's less reason to have strongly-typed containers for them (unlike the `arrow::Array` subclasses, where ListArray is quite different from Int8Array).
My view is that if the visitor pattern needs to be employed, we can do it using the `type()` member on the tensor (which also provides compile-time access to `TypeClass::c_type` if needed)
Author: Wes McKinney <we...@twosigma.com>
Author: Kouhei Sutou <ko...@clear-code.com>
Closes #571 from wesm/ARROW-860 and squashes the following commits:
fe0b4d8 [Kouhei Sutou] Remove typed Tensors from glib
357f441 [Wes McKinney] Remove typed Tensor containers
Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/a68f31b0
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/a68f31b0
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/a68f31b0
Branch: refs/heads/master
Commit: a68f31b0f3f2c094c5d6660a2d936baa05da3103
Parents: 0dc6fe8
Author: Wes McKinney <we...@twosigma.com>
Authored: Thu Apr 20 09:36:21 2017 +0200
Committer: Uwe L. Korn <uw...@xhochy.com>
Committed: Thu Apr 20 09:36:21 2017 +0200
----------------------------------------------------------------------
c_glib/arrow-glib/Makefile.am | 5 --
c_glib/arrow-glib/arrow-glib.h | 2 -
c_glib/arrow-glib/int8-tensor.cpp | 105 --------------------------
c_glib/arrow-glib/int8-tensor.h | 79 -------------------
c_glib/arrow-glib/numeric-tensor.hpp | 64 ----------------
c_glib/arrow-glib/tensor.cpp | 103 +++++++++++++------------
c_glib/arrow-glib/tensor.h | 8 ++
c_glib/arrow-glib/uint8-tensor.cpp | 105 --------------------------
c_glib/arrow-glib/uint8-tensor.h | 79 -------------------
c_glib/test/test-int8-tensor.rb | 43 -----------
c_glib/test/test-tensor.rb | 6 +-
c_glib/test/test-uint8-tensor.rb | 43 -----------
cpp/src/arrow/compare.cc | 37 +++------
cpp/src/arrow/ipc/ipc-read-write-test.cc | 6 +-
cpp/src/arrow/ipc/reader.cc | 3 +-
cpp/src/arrow/python/numpy_convert.cc | 3 +-
cpp/src/arrow/tensor-test.cc | 14 ++--
cpp/src/arrow/tensor.cc | 65 ----------------
cpp/src/arrow/tensor.h | 47 +-----------
cpp/src/arrow/visitor_inline.h | 25 ------
20 files changed, 94 insertions(+), 748 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/c_glib/arrow-glib/Makefile.am
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/Makefile.am b/c_glib/arrow-glib/Makefile.am
index fbfe3a4..11b6508 100644
--- a/c_glib/arrow-glib/Makefile.am
+++ b/c_glib/arrow-glib/Makefile.am
@@ -65,7 +65,6 @@ libarrow_glib_la_headers = \
int8-array.h \
int8-array-builder.h \
int8-data-type.h \
- int8-tensor.h \
int16-array.h \
int16-array-builder.h \
int16-data-type.h \
@@ -94,7 +93,6 @@ libarrow_glib_la_headers = \
uint8-array.h \
uint8-array-builder.h \
uint8-data-type.h \
- uint8-tensor.h \
uint16-array.h \
uint16-array-builder.h \
uint16-data-type.h \
@@ -155,7 +153,6 @@ libarrow_glib_la_sources = \
int8-array.cpp \
int8-array-builder.cpp \
int8-data-type.cpp \
- int8-tensor.cpp \
int16-array.cpp \
int16-array-builder.cpp \
int16-data-type.cpp \
@@ -184,7 +181,6 @@ libarrow_glib_la_sources = \
uint8-array.cpp \
uint8-array-builder.cpp \
uint8-data-type.cpp \
- uint8-tensor.cpp \
uint16-array.cpp \
uint16-array-builder.cpp \
uint16-data-type.cpp \
@@ -226,7 +222,6 @@ libarrow_glib_la_cpp_headers = \
data-type.hpp \
error.hpp \
field.hpp \
- numeric-tensor.hpp \
record-batch.hpp \
schema.hpp \
table.hpp \
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/c_glib/arrow-glib/arrow-glib.h
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/arrow-glib.h b/c_glib/arrow-glib/arrow-glib.h
index eec9e25..8d9bfe2 100644
--- a/c_glib/arrow-glib/arrow-glib.h
+++ b/c_glib/arrow-glib/arrow-glib.h
@@ -42,7 +42,6 @@
#include <arrow-glib/int8-array.h>
#include <arrow-glib/int8-array-builder.h>
#include <arrow-glib/int8-data-type.h>
-#include <arrow-glib/int8-tensor.h>
#include <arrow-glib/int16-array.h>
#include <arrow-glib/int16-array-builder.h>
#include <arrow-glib/int16-data-type.h>
@@ -71,7 +70,6 @@
#include <arrow-glib/uint8-array.h>
#include <arrow-glib/uint8-array-builder.h>
#include <arrow-glib/uint8-data-type.h>
-#include <arrow-glib/uint8-tensor.h>
#include <arrow-glib/uint16-array.h>
#include <arrow-glib/uint16-array-builder.h>
#include <arrow-glib/uint16-data-type.h>
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/c_glib/arrow-glib/int8-tensor.cpp
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/int8-tensor.cpp b/c_glib/arrow-glib/int8-tensor.cpp
deleted file mode 100644
index 06521a0..0000000
--- a/c_glib/arrow-glib/int8-tensor.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <arrow-glib/buffer.hpp>
-#include <arrow-glib/int8-tensor.h>
-#include <arrow-glib/numeric-tensor.hpp>
-
-G_BEGIN_DECLS
-
-/**
- * SECTION: int8-tensor
- * @short_description: 8-bit integer tensor class
- *
- * #GArrowInt8Tensor is a class for 8-bit integer tensor. It can store
- * zero or more 8-bit integer data.
- */
-
-G_DEFINE_TYPE(GArrowInt8Tensor, \
- garrow_int8_tensor, \
- GARROW_TYPE_TENSOR)
-
-static void
-garrow_int8_tensor_init(GArrowInt8Tensor *object)
-{
-}
-
-static void
-garrow_int8_tensor_class_init(GArrowInt8TensorClass *klass)
-{
-}
-
-/**
- * garrow_int8_tensor_new:
- * @data: A #GArrowBuffer that contains tensor data.
- * @shape: (array length=n_dimensions): A list of dimension sizes.
- * @n_dimensions: The number of dimensions.
- * @strides: (array length=n_strides) (nullable): A list of the number of
- * bytes in each dimension.
- * @n_strides: The number of strides.
- * @dimention_names: (array length=n_dimention_names) (nullable): A list of
- * dimension names.
- * @n_dimention_names: The number of dimension names
- *
- * Returns: The newly created #GArrowInt8Tensor.
- *
- * Since: 0.3.0
- */
-GArrowInt8Tensor *
-garrow_int8_tensor_new(GArrowBuffer *data,
- gint64 *shape,
- gsize n_dimensions,
- gint64 *strides,
- gsize n_strides,
- gchar **dimension_names,
- gsize n_dimension_names)
-{
- auto tensor =
- garrow::numeric_tensor_new<arrow::Int8Tensor>(data,
- shape,
- n_dimensions,
- strides,
- n_strides,
- dimension_names,
- n_dimension_names);
- return GARROW_INT8_TENSOR(tensor);
-}
-
-/**
- * garrow_int8_tensor_get_raw_data:
- * @tensor: A #GArrowInt8Tensor.
- * @n_data: (out): The number of data.
- *
- * Returns: (array length=n_data): The raw data in the tensor.
- *
- * Since: 0.3.0
- */
-const gint8 *
-garrow_int8_tensor_get_raw_data(GArrowInt8Tensor *tensor,
- gint64 *n_data)
-{
- return garrow::numeric_tensor_get_raw_data<arrow::Int8Tensor, int8_t>(GARROW_TENSOR(tensor),
- n_data);
-}
-
-G_END_DECLS
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/c_glib/arrow-glib/int8-tensor.h
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/int8-tensor.h b/c_glib/arrow-glib/int8-tensor.h
deleted file mode 100644
index 76ed3c8..0000000
--- a/c_glib/arrow-glib/int8-tensor.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#pragma once
-
-#include <arrow-glib/tensor.h>
-
-G_BEGIN_DECLS
-
-#define GARROW_TYPE_INT8_TENSOR \
- (garrow_int8_tensor_get_type())
-#define GARROW_INT8_TENSOR(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- GARROW_TYPE_INT8_TENSOR, \
- GArrowInt8Tensor))
-#define GARROW_INT8_TENSOR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- GARROW_TYPE_INT8_TENSOR, \
- GArrowInt8TensorClass))
-#define GARROW_IS_INT8_TENSOR(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- GARROW_TYPE_INT8_TENSOR))
-#define GARROW_IS_INT8_TENSOR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- GARROW_TYPE_INT8_TENSOR))
-#define GARROW_INT8_TENSOR_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS((obj), \
- GARROW_TYPE_INT8_TENSOR, \
- GArrowInt8TensorClass))
-
-typedef struct _GArrowInt8Tensor GArrowInt8Tensor;
-typedef struct _GArrowInt8TensorClass GArrowInt8TensorClass;
-
-/**
- * GArrowInt8Tensor:
- *
- * It wraps `arrow::Int8Tensor`.
- */
-struct _GArrowInt8Tensor
-{
- /*< private >*/
- GArrowTensor parent_instance;
-};
-
-struct _GArrowInt8TensorClass
-{
- GArrowTensorClass parent_class;
-};
-
-GType garrow_int8_tensor_get_type(void) G_GNUC_CONST;
-
-GArrowInt8Tensor *garrow_int8_tensor_new(GArrowBuffer *data,
- gint64 *shape,
- gsize n_dimensions,
- gint64 *strides,
- gsize n_strides,
- gchar **dimention_names,
- gsize n_dimention_names);
-
-const gint8 *garrow_int8_tensor_get_raw_data(GArrowInt8Tensor *tensor,
- gint64 *n_data);
-
-G_END_DECLS
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/c_glib/arrow-glib/numeric-tensor.hpp
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/numeric-tensor.hpp b/c_glib/arrow-glib/numeric-tensor.hpp
deleted file mode 100644
index 07cea62..0000000
--- a/c_glib/arrow-glib/numeric-tensor.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#pragma once
-
-#include <arrow-glib/tensor.hpp>
-
-namespace garrow {
- template <typename T>
- GArrowTensor *numeric_tensor_new(GArrowBuffer *data,
- gint64 *shape,
- gsize n_dimensions,
- gint64 *strides,
- gsize n_strides,
- gchar **dimention_names,
- gsize n_dimention_names) {
- auto arrow_data = garrow_buffer_get_raw(data);
- std::vector<int64_t> arrow_shape;
- for (gsize i = 0; i < n_dimensions; ++i) {
- arrow_shape.push_back(shape[i]);
- }
- std::vector<int64_t> arrow_strides;
- for (gsize i = 0; i < n_strides; ++i) {
- arrow_strides.push_back(strides[i]);
- }
- std::vector<std::string> arrow_dimention_names;
- for (gsize i = 0; i < n_dimention_names; ++i) {
- arrow_dimention_names.push_back(dimention_names[i]);
- }
- auto arrow_numeric_tensor =
- std::make_shared<T>(arrow_data,
- arrow_shape,
- arrow_strides,
- arrow_dimention_names);
- std::shared_ptr<arrow::Tensor> arrow_tensor = arrow_numeric_tensor;
- auto tensor = garrow_tensor_new_raw(&arrow_tensor);
- return tensor;
- }
-
- template <typename T, typename value_type>
- const value_type *numeric_tensor_get_raw_data(GArrowTensor *tensor,
- gint64 *n_data) {
- auto arrow_tensor = garrow_tensor_get_raw(tensor);
- auto arrow_numeric_tensor = static_cast<const T *>(arrow_tensor.get());
- *n_data = arrow_numeric_tensor->size();
- return arrow_numeric_tensor->raw_data();
- }
-}
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/c_glib/arrow-glib/tensor.cpp
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/tensor.cpp b/c_glib/arrow-glib/tensor.cpp
index cbc9d8e..468eb07 100644
--- a/c_glib/arrow-glib/tensor.cpp
+++ b/c_glib/arrow-glib/tensor.cpp
@@ -23,10 +23,8 @@
#include <arrow-glib/buffer.hpp>
#include <arrow-glib/data-type.hpp>
-#include <arrow-glib/int8-tensor.h>
#include <arrow-glib/tensor.hpp>
#include <arrow-glib/type.hpp>
-#include <arrow-glib/uint8-tensor.h>
G_BEGIN_DECLS
@@ -122,6 +120,58 @@ garrow_tensor_class_init(GArrowTensorClass *klass)
}
/**
+ * garrow_tensor_new:
+ * @data_type: A #GArrowDataType that indicates each element type
+ * in the tensor.
+ * @data: A #GArrowBuffer that contains tensor data.
+ * @shape: (array length=n_dimensions): A list of dimension sizes.
+ * @n_dimensions: The number of dimensions.
+ * @strides: (array length=n_strides) (nullable): A list of the number of
+ * bytes in each dimension.
+ * @n_strides: The number of strides.
+ * @dimention_names: (array length=n_dimention_names) (nullable): A list of
+ * dimension names.
+ * @n_dimention_names: The number of dimension names
+ *
+ * Returns: The newly created #GArrowTensor.
+ *
+ * Since: 0.3.0
+ */
+GArrowTensor *
+garrow_tensor_new(GArrowDataType *data_type,
+ GArrowBuffer *data,
+ gint64 *shape,
+ gsize n_dimensions,
+ gint64 *strides,
+ gsize n_strides,
+ gchar **dimension_names,
+ gsize n_dimension_names)
+{
+ auto arrow_data_type = garrow_data_type_get_raw(data_type);
+ auto arrow_data = garrow_buffer_get_raw(data);
+ std::vector<int64_t> arrow_shape;
+ for (gsize i = 0; i < n_dimensions; ++i) {
+ arrow_shape.push_back(shape[i]);
+ }
+ std::vector<int64_t> arrow_strides;
+ for (gsize i = 0; i < n_strides; ++i) {
+ arrow_strides.push_back(strides[i]);
+ }
+ std::vector<std::string> arrow_dimension_names;
+ for (gsize i = 0; i < n_dimension_names; ++i) {
+ arrow_dimension_names.push_back(dimension_names[i]);
+ }
+ auto arrow_tensor =
+ std::make_shared<arrow::Tensor>(arrow_data_type,
+ arrow_data,
+ arrow_shape,
+ arrow_strides,
+ arrow_dimension_names);
+ auto tensor = garrow_tensor_new_raw(&arrow_tensor);
+ return tensor;
+}
+
+/**
* garrow_tensor_get_value_data_type:
* @tensor: A #GArrowTensor.
*
@@ -333,52 +383,9 @@ G_END_DECLS
GArrowTensor *
garrow_tensor_new_raw(std::shared_ptr<arrow::Tensor> *arrow_tensor)
{
- GType type;
- GArrowTensor *tensor;
-
- switch ((*arrow_tensor)->type_id()) {
- case arrow::Type::type::UINT8:
- type = GARROW_TYPE_UINT8_TENSOR;
- break;
- case arrow::Type::type::INT8:
- type = GARROW_TYPE_INT8_TENSOR;
- break;
-/*
- case arrow::Type::type::UINT16:
- type = GARROW_TYPE_UINT16_TENSOR;
- break;
- case arrow::Type::type::INT16:
- type = GARROW_TYPE_INT16_TENSOR;
- break;
- case arrow::Type::type::UINT32:
- type = GARROW_TYPE_UINT32_TENSOR;
- break;
- case arrow::Type::type::INT32:
- type = GARROW_TYPE_INT32_TENSOR;
- break;
- case arrow::Type::type::UINT64:
- type = GARROW_TYPE_UINT64_TENSOR;
- break;
- case arrow::Type::type::INT64:
- type = GARROW_TYPE_INT64_TENSOR;
- break;
- case arrow::Type::type::HALF_FLOAT:
- type = GARROW_TYPE_HALF_FLOAT_TENSOR;
- break;
- case arrow::Type::type::FLOAT:
- type = GARROW_TYPE_FLOAT_TENSOR;
- break;
- case arrow::Type::type::DOUBLE:
- type = GARROW_TYPE_DOUBLE_TENSOR;
- break;
-*/
- default:
- type = GARROW_TYPE_TENSOR;
- break;
- }
- tensor = GARROW_TENSOR(g_object_new(type,
- "tensor", arrow_tensor,
- NULL));
+ auto tensor = GARROW_TENSOR(g_object_new(GARROW_TYPE_TENSOR,
+ "tensor", arrow_tensor,
+ NULL));
return tensor;
}
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/c_glib/arrow-glib/tensor.h
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/tensor.h b/c_glib/arrow-glib/tensor.h
index bedc803..71c6b4e 100644
--- a/c_glib/arrow-glib/tensor.h
+++ b/c_glib/arrow-glib/tensor.h
@@ -58,6 +58,14 @@ struct _GArrowTensorClass
GType garrow_tensor_get_type (void) G_GNUC_CONST;
+GArrowTensor *garrow_tensor_new (GArrowDataType *data_type,
+ GArrowBuffer *data,
+ gint64 *shape,
+ gsize n_dimensions,
+ gint64 *strides,
+ gsize n_strides,
+ gchar **dimention_names,
+ gsize n_dimention_names);
GArrowDataType *garrow_tensor_get_value_data_type(GArrowTensor *tensor);
GArrowType garrow_tensor_get_value_type (GArrowTensor *tensor);
GArrowBuffer *garrow_tensor_get_buffer (GArrowTensor *tensor);
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/c_glib/arrow-glib/uint8-tensor.cpp
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/uint8-tensor.cpp b/c_glib/arrow-glib/uint8-tensor.cpp
deleted file mode 100644
index 69f0f69..0000000
--- a/c_glib/arrow-glib/uint8-tensor.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <arrow-glib/buffer.hpp>
-#include <arrow-glib/uint8-tensor.h>
-#include <arrow-glib/numeric-tensor.hpp>
-
-G_BEGIN_DECLS
-
-/**
- * SECTION: uint8-tensor
- * @short_description: 8-bit unsigned integer tensor class
- *
- * #GArrowUint8Tensor is a class for 8-bit unsigned integer tensor. It
- * can store zero or more 8-bit integer data.
- */
-
-G_DEFINE_TYPE(GArrowUInt8Tensor, \
- garrow_uint8_tensor, \
- GARROW_TYPE_TENSOR)
-
-static void
-garrow_uint8_tensor_init(GArrowUInt8Tensor *object)
-{
-}
-
-static void
-garrow_uint8_tensor_class_init(GArrowUInt8TensorClass *klass)
-{
-}
-
-/**
- * garrow_uint8_tensor_new:
- * @data: A #GArrowBuffer that contains tensor data.
- * @shape: (array length=n_dimensions): A list of dimension sizes.
- * @n_dimensions: The number of dimensions.
- * @strides: (array length=n_strides) (nullable): A list of the number of
- * bytes in each dimension.
- * @n_strides: The number of strides.
- * @dimention_names: (array length=n_dimention_names) (nullable): A list of
- * dimension names.
- * @n_dimention_names: The number of dimension names
- *
- * Returns: The newly created #GArrowUInt8Tensor.
- *
- * Since: 0.3.0
- */
-GArrowUInt8Tensor *
-garrow_uint8_tensor_new(GArrowBuffer *data,
- gint64 *shape,
- gsize n_dimensions,
- gint64 *strides,
- gsize n_strides,
- gchar **dimension_names,
- gsize n_dimension_names)
-{
- auto tensor =
- garrow::numeric_tensor_new<arrow::UInt8Tensor>(data,
- shape,
- n_dimensions,
- strides,
- n_strides,
- dimension_names,
- n_dimension_names);
- return GARROW_UINT8_TENSOR(tensor);
-}
-
-/**
- * garrow_uint8_tensor_get_raw_data:
- * @tensor: A #GArrowUInt8Tensor.
- * @n_data: (out): The number of data.
- *
- * Returns: (array length=n_data): The raw data in the tensor.
- *
- * Since: 0.3.0
- */
-const guint8 *
-garrow_uint8_tensor_get_raw_data(GArrowUInt8Tensor *tensor,
- gint64 *n_data)
-{
- return garrow::numeric_tensor_get_raw_data<arrow::UInt8Tensor, uint8_t>(GARROW_TENSOR(tensor),
- n_data);
-}
-
-G_END_DECLS
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/c_glib/arrow-glib/uint8-tensor.h
----------------------------------------------------------------------
diff --git a/c_glib/arrow-glib/uint8-tensor.h b/c_glib/arrow-glib/uint8-tensor.h
deleted file mode 100644
index 248c507..0000000
--- a/c_glib/arrow-glib/uint8-tensor.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#pragma once
-
-#include <arrow-glib/tensor.h>
-
-G_BEGIN_DECLS
-
-#define GARROW_TYPE_UINT8_TENSOR \
- (garrow_uint8_tensor_get_type())
-#define GARROW_UINT8_TENSOR(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- GARROW_TYPE_UINT8_TENSOR, \
- GArrowUInt8Tensor))
-#define GARROW_UINT8_TENSOR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- GARROW_TYPE_UINT8_TENSOR, \
- GArrowUInt8TensorClass))
-#define GARROW_IS_UINT8_TENSOR(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- GARROW_TYPE_UINT8_TENSOR))
-#define GARROW_IS_UINT8_TENSOR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- GARROW_TYPE_UINT8_TENSOR))
-#define GARROW_UINT8_TENSOR_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS((obj), \
- GARROW_TYPE_UINT8_TENSOR, \
- GArrowUInt8TensorClass))
-
-typedef struct _GArrowUInt8Tensor GArrowUInt8Tensor;
-typedef struct _GArrowUInt8TensorClass GArrowUInt8TensorClass;
-
-/**
- * GArrowUInt8Tensor:
- *
- * It wraps `arrow::UInt8Tensor`.
- */
-struct _GArrowUInt8Tensor
-{
- /*< private >*/
- GArrowTensor parent_instance;
-};
-
-struct _GArrowUInt8TensorClass
-{
- GArrowTensorClass parent_class;
-};
-
-GType garrow_uint8_tensor_get_type(void) G_GNUC_CONST;
-
-GArrowUInt8Tensor *garrow_uint8_tensor_new(GArrowBuffer *data,
- gint64 *shape,
- gsize n_dimensions,
- gint64 *strides,
- gsize n_strides,
- gchar **dimention_names,
- gsize n_dimention_names);
-
-const guint8 *garrow_uint8_tensor_get_raw_data(GArrowUInt8Tensor *tensor,
- gint64 *n_data);
-
-G_END_DECLS
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/c_glib/test/test-int8-tensor.rb
----------------------------------------------------------------------
diff --git a/c_glib/test/test-int8-tensor.rb b/c_glib/test/test-int8-tensor.rb
deleted file mode 100644
index a96a407..0000000
--- a/c_glib/test/test-int8-tensor.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-class TestInt8Tensor < Test::Unit::TestCase
- include Helper::Omittable
-
- def setup
- @raw_data = [
- 1, 2,
- 3, 4,
-
- 5, 6,
- 7, 8,
-
- 9, 10,
- 11, 12,
- ]
- data = Arrow::Buffer.new(@raw_data.pack("c*"))
- shape = [3, 2, 2]
- strides = []
- names = []
- @tensor = Arrow::Int8Tensor.new(data, shape, strides, names)
- end
-
- def test_raw_data
- require_gi(3, 1, 2)
- assert_equal(@raw_data, @tensor.raw_data)
- end
-end
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/c_glib/test/test-tensor.rb
----------------------------------------------------------------------
diff --git a/c_glib/test/test-tensor.rb b/c_glib/test/test-tensor.rb
index 455b0d9..3e1f541 100644
--- a/c_glib/test/test-tensor.rb
+++ b/c_glib/test/test-tensor.rb
@@ -33,7 +33,11 @@ class TestTensor < Test::Unit::TestCase
@shape = [3, 2, 2]
strides = []
names = ["a", "b", "c"]
- @tensor = Arrow::Int8Tensor.new(data, @shape, strides, names)
+ @tensor = Arrow::Tensor.new(Arrow::Int8DataType.new,
+ data,
+ @shape,
+ strides,
+ names)
end
def test_value_data_type
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/c_glib/test/test-uint8-tensor.rb
----------------------------------------------------------------------
diff --git a/c_glib/test/test-uint8-tensor.rb b/c_glib/test/test-uint8-tensor.rb
deleted file mode 100644
index 0fe758b..0000000
--- a/c_glib/test/test-uint8-tensor.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-class TestUInt8Tensor < Test::Unit::TestCase
- include Helper::Omittable
-
- def setup
- @raw_data = [
- 1, 2,
- 3, 4,
-
- 5, 6,
- 7, 8,
-
- 9, 10,
- 11, 12,
- ]
- data = Arrow::Buffer.new(@raw_data.pack("c*"))
- shape = [3, 2, 2]
- strides = []
- names = []
- @tensor = Arrow::UInt8Tensor.new(data, shape, strides, names)
- end
-
- def test_raw_data
- require_gi(3, 1, 2)
- assert_equal(@raw_data, @tensor.raw_data)
- end
-end
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/cpp/src/arrow/compare.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/compare.cc b/cpp/src/arrow/compare.cc
index ccb299e..562d4e1 100644
--- a/cpp/src/arrow/compare.cc
+++ b/cpp/src/arrow/compare.cc
@@ -580,31 +580,6 @@ Status ArrayRangeEquals(const Array& left, const Array& right, int64_t left_star
// ----------------------------------------------------------------------
// Implement TensorEquals
-class TensorEqualsVisitor {
- public:
- explicit TensorEqualsVisitor(const Tensor& right) : right_(right) {}
-
- template <typename TensorType>
- Status Visit(const TensorType& left) {
- const auto& size_meta = dynamic_cast<const FixedWidthType&>(*left.type());
- const int byte_width = size_meta.bit_width() / 8;
- DCHECK_GT(byte_width, 0);
-
- const uint8_t* left_data = left.data()->data();
- const uint8_t* right_data = right_.data()->data();
-
- result_ =
- memcmp(left_data, right_data, static_cast<size_t>(byte_width * left.size())) == 0;
- return Status::OK();
- }
-
- bool result() const { return result_; }
-
- protected:
- const Tensor& right_;
- bool result_;
-};
-
Status TensorEquals(const Tensor& left, const Tensor& right, bool* are_equal) {
// The arrays are the same object
if (&left == &right) {
@@ -619,9 +594,15 @@ Status TensorEquals(const Tensor& left, const Tensor& right, bool* are_equal) {
"Comparison not implemented for non-contiguous tensors");
}
- TensorEqualsVisitor visitor(right);
- RETURN_NOT_OK(VisitTensorInline(left, &visitor));
- *are_equal = visitor.result();
+ const auto& size_meta = dynamic_cast<const FixedWidthType&>(*left.type());
+ const int byte_width = size_meta.bit_width() / 8;
+ DCHECK_GT(byte_width, 0);
+
+ const uint8_t* left_data = left.data()->data();
+ const uint8_t* right_data = right.data()->data();
+
+ *are_equal =
+ memcmp(left_data, right_data, static_cast<size_t>(byte_width * left.size())) == 0;
}
return Status::OK();
}
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/cpp/src/arrow/ipc/ipc-read-write-test.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/ipc/ipc-read-write-test.cc b/cpp/src/arrow/ipc/ipc-read-write-test.cc
index cd793e0..b4a88b5 100644
--- a/cpp/src/arrow/ipc/ipc-read-write-test.cc
+++ b/cpp/src/arrow/ipc/ipc-read-write-test.cc
@@ -704,8 +704,8 @@ TEST_F(TestTensorRoundTrip, BasicRoundtrip) {
auto data = test::GetBufferFromVector(values);
- Int64Tensor t0(data, shape, strides, dim_names);
- Int64Tensor tzero(data, {}, {}, {});
+ Tensor t0(int64(), data, shape, strides, dim_names);
+ Tensor tzero(int64(), data, {}, {}, {});
CheckTensorRoundTrip(t0);
CheckTensorRoundTrip(tzero);
@@ -724,7 +724,7 @@ TEST_F(TestTensorRoundTrip, NonContiguous) {
test::randint<int64_t>(24, 0, 100, &values);
auto data = test::GetBufferFromVector(values);
- Int64Tensor tensor(data, {4, 3}, {48, 16});
+ Tensor tensor(int64(), data, {4, 3}, {48, 16});
int32_t metadata_length;
int64_t body_length;
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/cpp/src/arrow/ipc/reader.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/ipc/reader.cc b/cpp/src/arrow/ipc/reader.cc
index 69fde17..aea4c9c 100644
--- a/cpp/src/arrow/ipc/reader.cc
+++ b/cpp/src/arrow/ipc/reader.cc
@@ -507,7 +507,8 @@ Status ReadTensor(
std::vector<std::string> dim_names;
RETURN_NOT_OK(
GetTensorMetadata(message->header(), &type, &shape, &strides, &dim_names));
- return MakeTensor(type, data, shape, strides, dim_names, out);
+ *out = std::make_shared<Tensor>(type, data, shape, strides, dim_names);
+ return Status::OK();
}
} // namespace ipc
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/cpp/src/arrow/python/numpy_convert.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/python/numpy_convert.cc b/cpp/src/arrow/python/numpy_convert.cc
index 2c1a591..c391b5d 100644
--- a/cpp/src/arrow/python/numpy_convert.cc
+++ b/cpp/src/arrow/python/numpy_convert.cc
@@ -223,7 +223,8 @@ Status NdarrayToTensor(MemoryPool* pool, PyObject* ao, std::shared_ptr<Tensor>*
std::shared_ptr<DataType> type;
RETURN_NOT_OK(
GetTensorType(reinterpret_cast<PyObject*>(PyArray_DESCR(ndarray)), &type));
- return MakeTensor(type, data, shape, strides, {}, out);
+ *out = std::make_shared<Tensor>(type, data, shape, strides);
+ return Status::OK();
}
Status TensorToNdarray(const Tensor& tensor, PyObject* base, PyObject** out) {
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/cpp/src/arrow/tensor-test.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/tensor-test.cc b/cpp/src/arrow/tensor-test.cc
index 336905c..c41683a 100644
--- a/cpp/src/arrow/tensor-test.cc
+++ b/cpp/src/arrow/tensor-test.cc
@@ -39,7 +39,7 @@ TEST(TestTensor, ZeroDim) {
std::shared_ptr<MutableBuffer> buffer;
ASSERT_OK(AllocateBuffer(default_memory_pool(), values * sizeof(T), &buffer));
- Int64Tensor t0(buffer, shape);
+ Tensor t0(int64(), buffer, shape);
ASSERT_EQ(1, t0.size());
}
@@ -55,9 +55,9 @@ TEST(TestTensor, BasicCtors) {
std::shared_ptr<MutableBuffer> buffer;
ASSERT_OK(AllocateBuffer(default_memory_pool(), values * sizeof(T), &buffer));
- Int64Tensor t1(buffer, shape);
- Int64Tensor t2(buffer, shape, strides);
- Int64Tensor t3(buffer, shape, strides, dim_names);
+ Tensor t1(int64(), buffer, shape);
+ Tensor t2(int64(), buffer, shape, strides);
+ Tensor t3(int64(), buffer, shape, strides, dim_names);
ASSERT_EQ(24, t1.size());
ASSERT_TRUE(t1.is_mutable());
@@ -84,9 +84,9 @@ TEST(TestTensor, IsContiguous) {
std::vector<int64_t> c_strides = {48, 8};
std::vector<int64_t> f_strides = {8, 32};
std::vector<int64_t> noncontig_strides = {8, 8};
- Int64Tensor t1(buffer, shape, c_strides);
- Int64Tensor t2(buffer, shape, f_strides);
- Int64Tensor t3(buffer, shape, noncontig_strides);
+ Tensor t1(int64(), buffer, shape, c_strides);
+ Tensor t2(int64(), buffer, shape, f_strides);
+ Tensor t3(int64(), buffer, shape, noncontig_strides);
ASSERT_TRUE(t1.is_contiguous());
ASSERT_TRUE(t2.is_contiguous());
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/cpp/src/arrow/tensor.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/tensor.cc b/cpp/src/arrow/tensor.cc
index fa3e203..909b05e 100644
--- a/cpp/src/arrow/tensor.cc
+++ b/cpp/src/arrow/tensor.cc
@@ -118,69 +118,4 @@ bool Tensor::Equals(const Tensor& other) const {
return are_equal;
}
-template <typename T>
-NumericTensor<T>::NumericTensor(const std::shared_ptr<Buffer>& data,
- const std::vector<int64_t>& shape, const std::vector<int64_t>& strides,
- const std::vector<std::string>& dim_names)
- : Tensor(TypeTraits<T>::type_singleton(), data, shape, strides, dim_names),
- raw_data_(nullptr),
- mutable_raw_data_(nullptr) {
- if (data_) {
- raw_data_ = reinterpret_cast<const value_type*>(data_->data());
- if (data_->is_mutable()) {
- auto mut_buf = static_cast<MutableBuffer*>(data_.get());
- mutable_raw_data_ = reinterpret_cast<value_type*>(mut_buf->mutable_data());
- }
- }
-}
-
-template <typename T>
-NumericTensor<T>::NumericTensor(
- const std::shared_ptr<Buffer>& data, const std::vector<int64_t>& shape)
- : NumericTensor(data, shape, {}, {}) {}
-
-template <typename T>
-NumericTensor<T>::NumericTensor(const std::shared_ptr<Buffer>& data,
- const std::vector<int64_t>& shape, const std::vector<int64_t>& strides)
- : NumericTensor(data, shape, strides, {}) {}
-
-template class ARROW_TEMPLATE_EXPORT NumericTensor<Int8Type>;
-template class ARROW_TEMPLATE_EXPORT NumericTensor<UInt8Type>;
-template class ARROW_TEMPLATE_EXPORT NumericTensor<Int16Type>;
-template class ARROW_TEMPLATE_EXPORT NumericTensor<UInt16Type>;
-template class ARROW_TEMPLATE_EXPORT NumericTensor<Int32Type>;
-template class ARROW_TEMPLATE_EXPORT NumericTensor<UInt32Type>;
-template class ARROW_TEMPLATE_EXPORT NumericTensor<Int64Type>;
-template class ARROW_TEMPLATE_EXPORT NumericTensor<UInt64Type>;
-template class ARROW_TEMPLATE_EXPORT NumericTensor<HalfFloatType>;
-template class ARROW_TEMPLATE_EXPORT NumericTensor<FloatType>;
-template class ARROW_TEMPLATE_EXPORT NumericTensor<DoubleType>;
-
-#define TENSOR_CASE(TYPE, TENSOR_TYPE) \
- case Type::TYPE: \
- *tensor = std::make_shared<TENSOR_TYPE>(data, shape, strides, dim_names); \
- break;
-
-Status ARROW_EXPORT MakeTensor(const std::shared_ptr<DataType>& type,
- const std::shared_ptr<Buffer>& data, const std::vector<int64_t>& shape,
- const std::vector<int64_t>& strides, const std::vector<std::string>& dim_names,
- std::shared_ptr<Tensor>* tensor) {
- switch (type->id()) {
- TENSOR_CASE(INT8, Int8Tensor);
- TENSOR_CASE(INT16, Int16Tensor);
- TENSOR_CASE(INT32, Int32Tensor);
- TENSOR_CASE(INT64, Int64Tensor);
- TENSOR_CASE(UINT8, UInt8Tensor);
- TENSOR_CASE(UINT16, UInt16Tensor);
- TENSOR_CASE(UINT32, UInt32Tensor);
- TENSOR_CASE(UINT64, UInt64Tensor);
- TENSOR_CASE(HALF_FLOAT, HalfFloatTensor);
- TENSOR_CASE(FLOAT, FloatTensor);
- TENSOR_CASE(DOUBLE, DoubleTensor);
- default:
- return Status::NotImplemented(type->ToString());
- }
- return Status::OK();
-}
-
} // namespace arrow
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/cpp/src/arrow/tensor.h
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/tensor.h b/cpp/src/arrow/tensor.h
index 7741c30..371f591 100644
--- a/cpp/src/arrow/tensor.h
+++ b/cpp/src/arrow/tensor.h
@@ -76,6 +76,9 @@ class ARROW_EXPORT Tensor {
std::shared_ptr<DataType> type() const { return type_; }
std::shared_ptr<Buffer> data() const { return data_; }
+ const uint8_t* raw_data() const { return data_->data(); }
+ uint8_t* raw_data() { return data_->mutable_data(); }
+
const std::vector<int64_t>& shape() const { return shape_; }
const std::vector<int64_t>& strides() const { return strides_; }
@@ -117,50 +120,6 @@ class ARROW_EXPORT Tensor {
DISALLOW_COPY_AND_ASSIGN(Tensor);
};
-template <typename T>
-class ARROW_EXPORT NumericTensor : public Tensor {
- public:
- using value_type = typename T::c_type;
-
- NumericTensor(const std::shared_ptr<Buffer>& data, const std::vector<int64_t>& shape);
-
- /// Constructor with non-negative strides
- NumericTensor(const std::shared_ptr<Buffer>& data, const std::vector<int64_t>& shape,
- const std::vector<int64_t>& strides);
-
- /// Constructor with strides and dimension names
- NumericTensor(const std::shared_ptr<Buffer>& data, const std::vector<int64_t>& shape,
- const std::vector<int64_t>& strides, const std::vector<std::string>& dim_names);
-
- const value_type* raw_data() const { return raw_data_; }
- value_type* raw_data() { return mutable_raw_data_; }
-
- private:
- const value_type* raw_data_;
- value_type* mutable_raw_data_;
-};
-
-Status ARROW_EXPORT MakeTensor(const std::shared_ptr<DataType>& type,
- const std::shared_ptr<Buffer>& data, const std::vector<int64_t>& shape,
- const std::vector<int64_t>& strides, const std::vector<std::string>& dim_names,
- std::shared_ptr<Tensor>* tensor);
-
-// ----------------------------------------------------------------------
-// extern templates and other details
-
-// Only instantiate these templates once
-ARROW_EXTERN_TEMPLATE NumericTensor<Int8Type>;
-ARROW_EXTERN_TEMPLATE NumericTensor<UInt8Type>;
-ARROW_EXTERN_TEMPLATE NumericTensor<Int16Type>;
-ARROW_EXTERN_TEMPLATE NumericTensor<UInt16Type>;
-ARROW_EXTERN_TEMPLATE NumericTensor<Int32Type>;
-ARROW_EXTERN_TEMPLATE NumericTensor<UInt32Type>;
-ARROW_EXTERN_TEMPLATE NumericTensor<Int64Type>;
-ARROW_EXTERN_TEMPLATE NumericTensor<UInt64Type>;
-ARROW_EXTERN_TEMPLATE NumericTensor<HalfFloatType>;
-ARROW_EXTERN_TEMPLATE NumericTensor<FloatType>;
-ARROW_EXTERN_TEMPLATE NumericTensor<DoubleType>;
-
} // namespace arrow
#endif // ARROW_TENSOR_H
http://git-wip-us.apache.org/repos/asf/arrow/blob/a68f31b0/cpp/src/arrow/visitor_inline.h
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/visitor_inline.h b/cpp/src/arrow/visitor_inline.h
index bc5f493..7478950 100644
--- a/cpp/src/arrow/visitor_inline.h
+++ b/cpp/src/arrow/visitor_inline.h
@@ -104,31 +104,6 @@ inline Status VisitArrayInline(const Array& array, VISITOR* visitor) {
return Status::NotImplemented("Type not implemented");
}
-#define TENSOR_VISIT_INLINE(TYPE_CLASS) \
- case TYPE_CLASS::type_id: \
- return visitor->Visit( \
- static_cast<const typename TypeTraits<TYPE_CLASS>::TensorType&>(array));
-
-template <typename VISITOR>
-inline Status VisitTensorInline(const Tensor& array, VISITOR* visitor) {
- switch (array.type_id()) {
- TENSOR_VISIT_INLINE(Int8Type);
- TENSOR_VISIT_INLINE(UInt8Type);
- TENSOR_VISIT_INLINE(Int16Type);
- TENSOR_VISIT_INLINE(UInt16Type);
- TENSOR_VISIT_INLINE(Int32Type);
- TENSOR_VISIT_INLINE(UInt32Type);
- TENSOR_VISIT_INLINE(Int64Type);
- TENSOR_VISIT_INLINE(UInt64Type);
- TENSOR_VISIT_INLINE(HalfFloatType);
- TENSOR_VISIT_INLINE(FloatType);
- TENSOR_VISIT_INLINE(DoubleType);
- default:
- break;
- }
- return Status::NotImplemented("Type not implemented");
-}
-
} // namespace arrow
#endif // ARROW_VISITOR_INLINE_H