From 6ccce1f8a0891ef53c8c26fa62c79c65033da407 Mon Sep 17 00:00:00 2001 From: Kouhei Sutou Date: Sun, 26 Nov 2017 16:47:31 +0900 Subject: [PATCH] [GLib] Add GArrowDictionaryDataType --- c_glib/arrow-glib/Makefile.am | 6 +- c_glib/arrow-glib/array.h | 1225 +---------------- c_glib/arrow-glib/array.hpp | 8 +- .../arrow-glib/{array.cpp => basic-array.cpp} | 206 +-- c_glib/arrow-glib/basic-array.h | 1115 +++++++++++++++ c_glib/arrow-glib/basic-array.hpp | 27 + c_glib/arrow-glib/basic-data-type.cpp | 38 +- c_glib/arrow-glib/basic-data-type.h | 104 +- c_glib/arrow-glib/composite-array.cpp | 237 ++++ c_glib/arrow-glib/composite-array.h | 132 ++ c_glib/arrow-glib/composite-data-type.cpp | 86 ++ c_glib/arrow-glib/composite-data-type.h | 25 + c_glib/arrow-glib/meson.build | 6 +- c_glib/doc/reference/arrow-glib-docs.xml | 3 +- c_glib/test/test-dictionary-data-type.rb | 56 + 15 files changed, 1765 insertions(+), 1509 deletions(-) rename c_glib/arrow-glib/{array.cpp => basic-array.cpp} (90%) create mode 100644 c_glib/arrow-glib/basic-array.h create mode 100644 c_glib/arrow-glib/basic-array.hpp create mode 100644 c_glib/arrow-glib/composite-array.cpp create mode 100644 c_glib/arrow-glib/composite-array.h create mode 100644 c_glib/test/test-dictionary-data-type.rb diff --git a/c_glib/arrow-glib/Makefile.am b/c_glib/arrow-glib/Makefile.am index e8073115d2a..39222a54801 100644 --- a/c_glib/arrow-glib/Makefile.am +++ b/c_glib/arrow-glib/Makefile.am @@ -45,10 +45,12 @@ libarrow_glib_la_headers = \ array.h \ array-builder.h \ arrow-glib.h \ + basic-array.h \ basic-data-type.h \ buffer.h \ chunked-array.h \ column.h \ + composite-array.h \ composite-data-type.h \ data-type.h \ error.h \ @@ -86,12 +88,13 @@ libarrow_glib_la_generated_sources = \ $(libarrow_glib_la_generated_headers) libarrow_glib_la_sources = \ - array.cpp \ array-builder.cpp \ + basic-array.cpp \ basic-data-type.cpp \ buffer.cpp \ chunked-array.cpp \ column.cpp \ + composite-array.cpp \ composite-data-type.cpp \ error.cpp \ field.cpp \ @@ -125,6 +128,7 @@ libarrow_glib_la_cpp_headers = \ array.hpp \ array-builder.hpp \ arrow-glib.hpp \ + basic-array.hpp \ basic-data-type.hpp \ buffer.hpp \ chunked-array.hpp \ diff --git a/c_glib/arrow-glib/array.h b/c_glib/arrow-glib/array.h index e988a8aae93..9a845597d4f 100644 --- a/c_glib/arrow-glib/array.h +++ b/c_glib/arrow-glib/array.h @@ -19,1226 +19,5 @@ #pragma once -#include -#include -#include - -G_BEGIN_DECLS - -#define GARROW_TYPE_ARRAY \ - (garrow_array_get_type()) -#define GARROW_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), GARROW_TYPE_ARRAY, GArrowArray)) -#define GARROW_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), GARROW_TYPE_ARRAY, GArrowArrayClass)) -#define GARROW_IS_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), GARROW_TYPE_ARRAY)) -#define GARROW_IS_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), GARROW_TYPE_ARRAY)) -#define GARROW_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), GARROW_TYPE_ARRAY, GArrowArrayClass)) - -typedef struct _GArrowArray GArrowArray; -typedef struct _GArrowArrayClass GArrowArrayClass; - -/** - * GArrowArray: - * - * It wraps `arrow::Array`. - */ -struct _GArrowArray -{ - /*< private >*/ - GObject parent_instance; -}; - -struct _GArrowArrayClass -{ - GObjectClass parent_class; -}; - -GType garrow_array_get_type (void) G_GNUC_CONST; - -gboolean garrow_array_equal (GArrowArray *array, - GArrowArray *other_array); -gboolean garrow_array_equal_approx(GArrowArray *array, - GArrowArray *other_array); -gboolean garrow_array_equal_range (GArrowArray *array, - gint64 start_index, - GArrowArray *other_array, - gint64 other_start_index, - gint64 end_index); - -gboolean garrow_array_is_null (GArrowArray *array, - gint64 i); -gboolean garrow_array_is_valid (GArrowArray *array, - gint64 i); -gint64 garrow_array_get_length (GArrowArray *array); -gint64 garrow_array_get_offset (GArrowArray *array); -gint64 garrow_array_get_n_nulls (GArrowArray *array); -GArrowBuffer *garrow_array_get_null_bitmap(GArrowArray *array); -GArrowDataType *garrow_array_get_value_data_type(GArrowArray *array); -GArrowType garrow_array_get_value_type(GArrowArray *array); -GArrowArray *garrow_array_slice (GArrowArray *array, - gint64 offset, - gint64 length); -gchar *garrow_array_to_string (GArrowArray *array, - GError **error); - -GArrowArray *garrow_array_cast (GArrowArray *array, - GArrowDataType *target_data_type, - GArrowCastOptions *options, - GError **error); - -#define GARROW_TYPE_NULL_ARRAY \ - (garrow_null_array_get_type()) -#define GARROW_NULL_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_NULL_ARRAY, \ - GArrowNullArray)) -#define GARROW_NULL_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_NULL_ARRAY, \ - GArrowNullArrayClass)) -#define GARROW_IS_NULL_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_NULL_ARRAY)) -#define GARROW_IS_NULL_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_NULL_ARRAY)) -#define GARROW_NULL_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_NULL_ARRAY, \ - GArrowNullArrayClass)) - -typedef struct _GArrowNullArray GArrowNullArray; -typedef struct _GArrowNullArrayClass GArrowNullArrayClass; - -/** - * GArrowNullArray: - * - * It wraps `arrow::NullArray`. - */ -struct _GArrowNullArray -{ - /*< private >*/ - GArrowArray parent_instance; -}; - -struct _GArrowNullArrayClass -{ - GArrowArrayClass parent_class; -}; - -GType garrow_null_array_get_type(void) G_GNUC_CONST; - -GArrowNullArray *garrow_null_array_new(gint64 length); - - -#define GARROW_TYPE_PRIMITIVE_ARRAY \ - (garrow_primitive_array_get_type()) -#define GARROW_PRIMITIVE_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_PRIMITIVE_ARRAY, \ - GArrowPrimitiveArray)) -#define GARROW_PRIMITIVE_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_PRIMITIVE_ARRAY, \ - GArrowPrimitiveArrayClass)) -#define GARROW_IS_PRIMITIVE_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_PRIMITIVE_ARRAY)) -#define GARROW_IS_PRIMITIVE_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_PRIMITIVE_ARRAY)) -#define GARROW_PRIMITIVE_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_PRIMITIVE_ARRAY, \ - GArrowPrimitiveArrayClass)) - -typedef struct _GArrowPrimitiveArray GArrowPrimitiveArray; -typedef struct _GArrowPrimitiveArrayClass GArrowPrimitiveArrayClass; - -/** - * GArrowPrimitiveArray: - * - * It wraps `arrow::PrimitiveArray`. - */ -struct _GArrowPrimitiveArray -{ - /*< private >*/ - GArrowArray parent_instance; -}; - -struct _GArrowPrimitiveArrayClass -{ - GArrowArrayClass parent_class; -}; - -GType garrow_primitive_array_get_type(void) G_GNUC_CONST; - -GArrowBuffer *garrow_primitive_array_get_buffer(GArrowPrimitiveArray *array); - - -#define GARROW_TYPE_BOOLEAN_ARRAY \ - (garrow_boolean_array_get_type()) -#define GARROW_BOOLEAN_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_BOOLEAN_ARRAY, \ - GArrowBooleanArray)) -#define GARROW_BOOLEAN_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_BOOLEAN_ARRAY, \ - GArrowBooleanArrayClass)) -#define GARROW_IS_BOOLEAN_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_BOOLEAN_ARRAY)) -#define GARROW_IS_BOOLEAN_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_BOOLEAN_ARRAY)) -#define GARROW_BOOLEAN_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_BOOLEAN_ARRAY, \ - GArrowBooleanArrayClass)) - -typedef struct _GArrowBooleanArray GArrowBooleanArray; -typedef struct _GArrowBooleanArrayClass GArrowBooleanArrayClass; - -/** - * GArrowBooleanArray: - * - * It wraps `arrow::BooleanArray`. - */ -struct _GArrowBooleanArray -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowBooleanArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_boolean_array_get_type (void) G_GNUC_CONST; - -GArrowBooleanArray *garrow_boolean_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -gboolean garrow_boolean_array_get_value (GArrowBooleanArray *array, - gint64 i); -gboolean *garrow_boolean_array_get_values(GArrowBooleanArray *array, - gint64 *length); - - -#define GARROW_TYPE_INT8_ARRAY \ - (garrow_int8_array_get_type()) -#define GARROW_INT8_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_INT8_ARRAY, \ - GArrowInt8Array)) -#define GARROW_INT8_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_INT8_ARRAY, \ - GArrowInt8ArrayClass)) -#define GARROW_IS_INT8_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_INT8_ARRAY)) -#define GARROW_IS_INT8_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_INT8_ARRAY)) -#define GARROW_INT8_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_INT8_ARRAY, \ - GArrowInt8ArrayClass)) - -typedef struct _GArrowInt8Array GArrowInt8Array; -typedef struct _GArrowInt8ArrayClass GArrowInt8ArrayClass; - -/** - * GArrowInt8Array: - * - * It wraps `arrow::Int8Array`. - */ -struct _GArrowInt8Array -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowInt8ArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_int8_array_get_type(void) G_GNUC_CONST; - -GArrowInt8Array *garrow_int8_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -gint8 garrow_int8_array_get_value(GArrowInt8Array *array, - gint64 i); -const gint8 *garrow_int8_array_get_values(GArrowInt8Array *array, - gint64 *length); - - -#define GARROW_TYPE_UINT8_ARRAY \ - (garrow_uint8_array_get_type()) -#define GARROW_UINT8_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_UINT8_ARRAY, \ - GArrowUInt8Array)) -#define GARROW_UINT8_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_UINT8_ARRAY, \ - GArrowUInt8ArrayClass)) -#define GARROW_IS_UINT8_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_UINT8_ARRAY)) -#define GARROW_IS_UINT8_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_UINT8_ARRAY)) -#define GARROW_UINT8_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_UINT8_ARRAY, \ - GArrowUInt8ArrayClass)) - -typedef struct _GArrowUInt8Array GArrowUInt8Array; -typedef struct _GArrowUInt8ArrayClass GArrowUInt8ArrayClass; - -/** - * GArrowUInt8Array: - * - * It wraps `arrow::UInt8Array`. - */ -struct _GArrowUInt8Array -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowUInt8ArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_uint8_array_get_type(void) G_GNUC_CONST; - -GArrowUInt8Array *garrow_uint8_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -guint8 garrow_uint8_array_get_value(GArrowUInt8Array *array, - gint64 i); -const guint8 *garrow_uint8_array_get_values(GArrowUInt8Array *array, - gint64 *length); - - -#define GARROW_TYPE_INT16_ARRAY \ - (garrow_int16_array_get_type()) -#define GARROW_INT16_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_INT16_ARRAY, \ - GArrowInt16Array)) -#define GARROW_INT16_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_INT16_ARRAY, \ - GArrowInt16ArrayClass)) -#define GARROW_IS_INT16_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_INT16_ARRAY)) -#define GARROW_IS_INT16_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_INT16_ARRAY)) -#define GARROW_INT16_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_INT16_ARRAY, \ - GArrowInt16ArrayClass)) - -typedef struct _GArrowInt16Array GArrowInt16Array; -typedef struct _GArrowInt16ArrayClass GArrowInt16ArrayClass; - -/** - * GArrowInt16Array: - * - * It wraps `arrow::Int16Array`. - */ -struct _GArrowInt16Array -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowInt16ArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_int16_array_get_type(void) G_GNUC_CONST; - -GArrowInt16Array *garrow_int16_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -gint16 garrow_int16_array_get_value(GArrowInt16Array *array, - gint64 i); -const gint16 *garrow_int16_array_get_values(GArrowInt16Array *array, - gint64 *length); - - -#define GARROW_TYPE_UINT16_ARRAY \ - (garrow_uint16_array_get_type()) -#define GARROW_UINT16_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_UINT16_ARRAY, \ - GArrowUInt16Array)) -#define GARROW_UINT16_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_UINT16_ARRAY, \ - GArrowUInt16ArrayClass)) -#define GARROW_IS_UINT16_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_UINT16_ARRAY)) -#define GARROW_IS_UINT16_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_UINT16_ARRAY)) -#define GARROW_UINT16_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_UINT16_ARRAY, \ - GArrowUInt16ArrayClass)) - -typedef struct _GArrowUInt16Array GArrowUInt16Array; -typedef struct _GArrowUInt16ArrayClass GArrowUInt16ArrayClass; - -/** - * GArrowUInt16Array: - * - * It wraps `arrow::UInt16Array`. - */ -struct _GArrowUInt16Array -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowUInt16ArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_uint16_array_get_type(void) G_GNUC_CONST; - -GArrowUInt16Array *garrow_uint16_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -guint16 garrow_uint16_array_get_value(GArrowUInt16Array *array, - gint64 i); -const guint16 *garrow_uint16_array_get_values(GArrowUInt16Array *array, - gint64 *length); - - -#define GARROW_TYPE_INT32_ARRAY \ - (garrow_int32_array_get_type()) -#define GARROW_INT32_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_INT32_ARRAY, \ - GArrowInt32Array)) -#define GARROW_INT32_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_INT32_ARRAY, \ - GArrowInt32ArrayClass)) -#define GARROW_IS_INT32_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_INT32_ARRAY)) -#define GARROW_IS_INT32_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_INT32_ARRAY)) -#define GARROW_INT32_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_INT32_ARRAY, \ - GArrowInt32ArrayClass)) - -typedef struct _GArrowInt32Array GArrowInt32Array; -typedef struct _GArrowInt32ArrayClass GArrowInt32ArrayClass; - -/** - * GArrowInt32Array: - * - * It wraps `arrow::Int32Array`. - */ -struct _GArrowInt32Array -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowInt32ArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_int32_array_get_type(void) G_GNUC_CONST; - -GArrowInt32Array *garrow_int32_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -gint32 garrow_int32_array_get_value(GArrowInt32Array *array, - gint64 i); -const gint32 *garrow_int32_array_get_values(GArrowInt32Array *array, - gint64 *length); - - -#define GARROW_TYPE_UINT32_ARRAY \ - (garrow_uint32_array_get_type()) -#define GARROW_UINT32_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_UINT32_ARRAY, \ - GArrowUInt32Array)) -#define GARROW_UINT32_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_UINT32_ARRAY, \ - GArrowUInt32ArrayClass)) -#define GARROW_IS_UINT32_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_UINT32_ARRAY)) -#define GARROW_IS_UINT32_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_UINT32_ARRAY)) -#define GARROW_UINT32_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_UINT32_ARRAY, \ - GArrowUInt32ArrayClass)) - -typedef struct _GArrowUInt32Array GArrowUInt32Array; -typedef struct _GArrowUInt32ArrayClass GArrowUInt32ArrayClass; - -/** - * GArrowUInt32Array: - * - * It wraps `arrow::UInt32Array`. - */ -struct _GArrowUInt32Array -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowUInt32ArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_uint32_array_get_type(void) G_GNUC_CONST; - -GArrowUInt32Array *garrow_uint32_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -guint32 garrow_uint32_array_get_value(GArrowUInt32Array *array, - gint64 i); -const guint32 *garrow_uint32_array_get_values(GArrowUInt32Array *array, - gint64 *length); - - -#define GARROW_TYPE_INT64_ARRAY \ - (garrow_int64_array_get_type()) -#define GARROW_INT64_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_INT64_ARRAY, \ - GArrowInt64Array)) -#define GARROW_INT64_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_INT64_ARRAY, \ - GArrowInt64ArrayClass)) -#define GARROW_IS_INT64_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_INT64_ARRAY)) -#define GARROW_IS_INT64_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_INT64_ARRAY)) -#define GARROW_INT64_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_INT64_ARRAY, \ - GArrowInt64ArrayClass)) - -typedef struct _GArrowInt64Array GArrowInt64Array; -typedef struct _GArrowInt64ArrayClass GArrowInt64ArrayClass; - -/** - * GArrowInt64Array: - * - * It wraps `arrow::Int64Array`. - */ -struct _GArrowInt64Array -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowInt64ArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_int64_array_get_type(void) G_GNUC_CONST; - -GArrowInt64Array *garrow_int64_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -gint64 garrow_int64_array_get_value(GArrowInt64Array *array, - gint64 i); -const gint64 *garrow_int64_array_get_values(GArrowInt64Array *array, - gint64 *length); - - -#define GARROW_TYPE_UINT64_ARRAY \ - (garrow_uint64_array_get_type()) -#define GARROW_UINT64_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_UINT64_ARRAY, \ - GArrowUInt64Array)) -#define GARROW_UINT64_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_UINT64_ARRAY, \ - GArrowUInt64ArrayClass)) -#define GARROW_IS_UINT64_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_UINT64_ARRAY)) -#define GARROW_IS_UINT64_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_UINT64_ARRAY)) -#define GARROW_UINT64_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_UINT64_ARRAY, \ - GArrowUInt64ArrayClass)) - -typedef struct _GArrowUInt64Array GArrowUInt64Array; -typedef struct _GArrowUInt64ArrayClass GArrowUInt64ArrayClass; - -/** - * GArrowUInt64Array: - * - * It wraps `arrow::UInt64Array`. - */ -struct _GArrowUInt64Array -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowUInt64ArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_uint64_array_get_type(void) G_GNUC_CONST; - -GArrowUInt64Array *garrow_uint64_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -guint64 garrow_uint64_array_get_value(GArrowUInt64Array *array, - gint64 i); -const guint64 *garrow_uint64_array_get_values(GArrowUInt64Array *array, - gint64 *length); - - -#define GARROW_TYPE_FLOAT_ARRAY \ - (garrow_float_array_get_type()) -#define GARROW_FLOAT_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_FLOAT_ARRAY, \ - GArrowFloatArray)) -#define GARROW_FLOAT_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_FLOAT_ARRAY, \ - GArrowFloatArrayClass)) -#define GARROW_IS_FLOAT_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_FLOAT_ARRAY)) -#define GARROW_IS_FLOAT_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_FLOAT_ARRAY)) -#define GARROW_FLOAT_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_FLOAT_ARRAY, \ - GArrowFloatArrayClass)) - -typedef struct _GArrowFloatArray GArrowFloatArray; -typedef struct _GArrowFloatArrayClass GArrowFloatArrayClass; - -/** - * GArrowFloatArray: - * - * It wraps `arrow::FloatArray`. - */ -struct _GArrowFloatArray -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowFloatArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_float_array_get_type(void) G_GNUC_CONST; - -GArrowFloatArray *garrow_float_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -gfloat garrow_float_array_get_value(GArrowFloatArray *array, - gint64 i); -const gfloat *garrow_float_array_get_values(GArrowFloatArray *array, - gint64 *length); - - -#define GARROW_TYPE_DOUBLE_ARRAY \ - (garrow_double_array_get_type()) -#define GARROW_DOUBLE_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_DOUBLE_ARRAY, \ - GArrowDoubleArray)) -#define GARROW_DOUBLE_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_DOUBLE_ARRAY, \ - GArrowDoubleArrayClass)) -#define GARROW_IS_DOUBLE_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_DOUBLE_ARRAY)) -#define GARROW_IS_DOUBLE_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_DOUBLE_ARRAY)) -#define GARROW_DOUBLE_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_DOUBLE_ARRAY, \ - GArrowDoubleArrayClass)) - -typedef struct _GArrowDoubleArray GArrowDoubleArray; -typedef struct _GArrowDoubleArrayClass GArrowDoubleArrayClass; - -/** - * GArrowDoubleArray: - * - * It wraps `arrow::DoubleArray`. - */ -struct _GArrowDoubleArray -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowDoubleArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_double_array_get_type(void) G_GNUC_CONST; - -GArrowDoubleArray *garrow_double_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -gdouble garrow_double_array_get_value(GArrowDoubleArray *array, - gint64 i); -const gdouble *garrow_double_array_get_values(GArrowDoubleArray *array, - gint64 *length); - - -#define GARROW_TYPE_BINARY_ARRAY \ - (garrow_binary_array_get_type()) -#define GARROW_BINARY_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_BINARY_ARRAY, \ - GArrowBinaryArray)) -#define GARROW_BINARY_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_BINARY_ARRAY, \ - GArrowBinaryArrayClass)) -#define GARROW_IS_BINARY_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_BINARY_ARRAY)) -#define GARROW_IS_BINARY_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_BINARY_ARRAY)) -#define GARROW_BINARY_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_BINARY_ARRAY, \ - GArrowBinaryArrayClass)) - -typedef struct _GArrowBinaryArray GArrowBinaryArray; -typedef struct _GArrowBinaryArrayClass GArrowBinaryArrayClass; - -/** - * GArrowBinaryArray: - * - * It wraps `arrow::BinaryArray`. - */ -struct _GArrowBinaryArray -{ - /*< private >*/ - GArrowArray parent_instance; -}; - -struct _GArrowBinaryArrayClass -{ - GArrowArrayClass parent_class; -}; - -GType garrow_binary_array_get_type(void) G_GNUC_CONST; - -GArrowBinaryArray *garrow_binary_array_new(gint64 length, - GArrowBuffer *value_offsets, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -GBytes *garrow_binary_array_get_value(GArrowBinaryArray *array, - gint64 i); -GArrowBuffer *garrow_binary_array_get_buffer(GArrowBinaryArray *array); -GArrowBuffer *garrow_binary_array_get_offsets_buffer(GArrowBinaryArray *array); - -#define GARROW_TYPE_STRING_ARRAY \ - (garrow_string_array_get_type()) -#define GARROW_STRING_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_STRING_ARRAY, \ - GArrowStringArray)) -#define GARROW_STRING_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_STRING_ARRAY, \ - GArrowStringArrayClass)) -#define GARROW_IS_STRING_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_STRING_ARRAY)) -#define GARROW_IS_STRING_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_STRING_ARRAY)) -#define GARROW_STRING_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_STRING_ARRAY, \ - GArrowStringArrayClass)) - -typedef struct _GArrowStringArray GArrowStringArray; -typedef struct _GArrowStringArrayClass GArrowStringArrayClass; - -/** - * GArrowStringArray: - * - * It wraps `arrow::StringArray`. - */ -struct _GArrowStringArray -{ - /*< private >*/ - GArrowBinaryArray parent_instance; -}; - -struct _GArrowStringArrayClass -{ - GArrowBinaryArrayClass parent_class; -}; - -GType garrow_string_array_get_type(void) G_GNUC_CONST; - -GArrowStringArray *garrow_string_array_new(gint64 length, - GArrowBuffer *value_offsets, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -gchar *garrow_string_array_get_string(GArrowStringArray *array, - gint64 i); - - -#define GARROW_TYPE_DATE32_ARRAY \ - (garrow_date32_array_get_type()) -#define GARROW_DATE32_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_DATE32_ARRAY, \ - GArrowDate32Array)) -#define GARROW_DATE32_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_DATE32_ARRAY, \ - GArrowDate32ArrayClass)) -#define GARROW_IS_DATE32_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_DATE32_ARRAY)) -#define GARROW_IS_DATE32_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_DATE32_ARRAY)) -#define GARROW_DATE32_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_DATE32_ARRAY, \ - GArrowDate32ArrayClass)) - -typedef struct _GArrowDate32Array GArrowDate32Array; -typedef struct _GArrowDate32ArrayClass GArrowDate32ArrayClass; - -/** - * GArrowDate32Array: - * - * It wraps `arrow::Date32Array`. - */ -struct _GArrowDate32Array -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowDate32ArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_date32_array_get_type(void) G_GNUC_CONST; - -GArrowDate32Array *garrow_date32_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -gint32 garrow_date32_array_get_value(GArrowDate32Array *array, - gint64 i); -const gint32 *garrow_date32_array_get_values(GArrowDate32Array *array, - gint64 *length); - - -#define GARROW_TYPE_DATE64_ARRAY \ - (garrow_date64_array_get_type()) -#define GARROW_DATE64_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_DATE64_ARRAY, \ - GArrowDate64Array)) -#define GARROW_DATE64_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_DATE64_ARRAY, \ - GArrowDate64ArrayClass)) -#define GARROW_IS_DATE64_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_DATE64_ARRAY)) -#define GARROW_IS_DATE64_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_DATE64_ARRAY)) -#define GARROW_DATE64_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_DATE64_ARRAY, \ - GArrowDate64ArrayClass)) - -typedef struct _GArrowDate64Array GArrowDate64Array; -typedef struct _GArrowDate64ArrayClass GArrowDate64ArrayClass; - -/** - * GArrowDate64Array: - * - * It wraps `arrow::Date64Array`. - */ -struct _GArrowDate64Array -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowDate64ArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_date64_array_get_type(void) G_GNUC_CONST; - -GArrowDate64Array *garrow_date64_array_new(gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -gint64 garrow_date64_array_get_value(GArrowDate64Array *array, - gint64 i); -const gint64 *garrow_date64_array_get_values(GArrowDate64Array *array, - gint64 *length); - - -#define GARROW_TYPE_TIMESTAMP_ARRAY \ - (garrow_timestamp_array_get_type()) -#define GARROW_TIMESTAMP_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_TIMESTAMP_ARRAY, \ - GArrowTimestampArray)) -#define GARROW_TIMESTAMP_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_TIMESTAMP_ARRAY, \ - GArrowTimestampArrayClass)) -#define GARROW_IS_TIMESTAMP_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_TIMESTAMP_ARRAY)) -#define GARROW_IS_TIMESTAMP_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_TIMESTAMP_ARRAY)) -#define GARROW_TIMESTAMP_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_TIMESTAMP_ARRAY, \ - GArrowTimestampArrayClass)) - -typedef struct _GArrowTimestampArray GArrowTimestampArray; -typedef struct _GArrowTimestampArrayClass GArrowTimestampArrayClass; - -/** - * GArrowTimestampArray: - * - * It wraps `arrow::TimestampArray`. - */ -struct _GArrowTimestampArray -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowTimestampArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_timestamp_array_get_type(void) G_GNUC_CONST; - -GArrowTimestampArray *garrow_timestamp_array_new(GArrowTimestampDataType *data_type, - gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -gint64 garrow_timestamp_array_get_value(GArrowTimestampArray *array, - gint64 i); -const gint64 *garrow_timestamp_array_get_values(GArrowTimestampArray *array, - gint64 *length); - - -#define GARROW_TYPE_TIME32_ARRAY \ - (garrow_time32_array_get_type()) -#define GARROW_TIME32_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_TIME32_ARRAY, \ - GArrowTime32Array)) -#define GARROW_TIME32_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_TIME32_ARRAY, \ - GArrowTime32ArrayClass)) -#define GARROW_IS_TIME32_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_TIME32_ARRAY)) -#define GARROW_IS_TIME32_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_TIME32_ARRAY)) -#define GARROW_TIME32_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_TIME32_ARRAY, \ - GArrowTime32ArrayClass)) - -typedef struct _GArrowTime32Array GArrowTime32Array; -typedef struct _GArrowTime32ArrayClass GArrowTime32ArrayClass; - -/** - * GArrowTime32Array: - * - * It wraps `arrow::Time32Array`. - */ -struct _GArrowTime32Array -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowTime32ArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_time32_array_get_type(void) G_GNUC_CONST; - -GArrowTime32Array *garrow_time32_array_new(GArrowTime32DataType *data_type, - gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -gint32 garrow_time32_array_get_value(GArrowTime32Array *array, - gint64 i); -const gint32 *garrow_time32_array_get_values(GArrowTime32Array *array, - gint64 *length); - - -#define GARROW_TYPE_TIME64_ARRAY \ - (garrow_time64_array_get_type()) -#define GARROW_TIME64_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_TIME64_ARRAY, \ - GArrowTime64Array)) -#define GARROW_TIME64_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_TIME64_ARRAY, \ - GArrowTime64ArrayClass)) -#define GARROW_IS_TIME64_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_TIME64_ARRAY)) -#define GARROW_IS_TIME64_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_TIME64_ARRAY)) -#define GARROW_TIME64_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_TIME64_ARRAY, \ - GArrowTime64ArrayClass)) - -typedef struct _GArrowTime64Array GArrowTime64Array; -typedef struct _GArrowTime64ArrayClass GArrowTime64ArrayClass; - -/** - * GArrowTime64Array: - * - * It wraps `arrow::Time64Array`. - */ -struct _GArrowTime64Array -{ - /*< private >*/ - GArrowPrimitiveArray parent_instance; -}; - -struct _GArrowTime64ArrayClass -{ - GArrowPrimitiveArrayClass parent_class; -}; - -GType garrow_time64_array_get_type(void) G_GNUC_CONST; - -GArrowTime64Array *garrow_time64_array_new(GArrowTime64DataType *data_type, - gint64 length, - GArrowBuffer *data, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -gint64 garrow_time64_array_get_value(GArrowTime64Array *array, - gint64 i); -const gint64 *garrow_time64_array_get_values(GArrowTime64Array *array, - gint64 *length); - - -#define GARROW_TYPE_LIST_ARRAY \ - (garrow_list_array_get_type()) -#define GARROW_LIST_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_LIST_ARRAY, \ - GArrowListArray)) -#define GARROW_LIST_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_LIST_ARRAY, \ - GArrowListArrayClass)) -#define GARROW_IS_LIST_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_LIST_ARRAY)) -#define GARROW_IS_LIST_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_LIST_ARRAY)) -#define GARROW_LIST_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_LIST_ARRAY, \ - GArrowListArrayClass)) - -typedef struct _GArrowListArray GArrowListArray; -typedef struct _GArrowListArrayClass GArrowListArrayClass; - -/** - * GArrowListArray: - * - * It wraps `arrow::ListArray`. - */ -struct _GArrowListArray -{ - /*< private >*/ - GArrowArray parent_instance; -}; - -struct _GArrowListArrayClass -{ - GArrowArrayClass parent_class; -}; - -GType garrow_list_array_get_type(void) G_GNUC_CONST; - -GArrowListArray *garrow_list_array_new(gint64 length, - GArrowBuffer *value_offsets, - GArrowArray *values, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -GArrowDataType *garrow_list_array_get_value_type(GArrowListArray *array); -GArrowArray *garrow_list_array_get_value(GArrowListArray *array, - gint64 i); - - -#define GARROW_TYPE_STRUCT_ARRAY \ - (garrow_struct_array_get_type()) -#define GARROW_STRUCT_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_STRUCT_ARRAY, \ - GArrowStructArray)) -#define GARROW_STRUCT_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_STRUCT_ARRAY, \ - GArrowStructArrayClass)) -#define GARROW_IS_STRUCT_ARRAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_STRUCT_ARRAY)) -#define GARROW_IS_STRUCT_ARRAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_STRUCT_ARRAY)) -#define GARROW_STRUCT_ARRAY_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_STRUCT_ARRAY, \ - GArrowStructArrayClass)) - -typedef struct _GArrowStructArray GArrowStructArray; -typedef struct _GArrowStructArrayClass GArrowStructArrayClass; - -/** - * GArrowStructArray: - * - * It wraps `arrow::StructArray`. - */ -struct _GArrowStructArray -{ - /*< private >*/ - GArrowArray parent_instance; -}; - -struct _GArrowStructArrayClass -{ - GArrowArrayClass parent_class; -}; - -GType garrow_struct_array_get_type(void) G_GNUC_CONST; - -GArrowStructArray *garrow_struct_array_new(GArrowDataType *data_type, - gint64 length, - GList *children, - GArrowBuffer *null_bitmap, - gint64 n_nulls); - -GArrowArray *garrow_struct_array_get_field(GArrowStructArray *array, - gint i); -GList *garrow_struct_array_get_fields(GArrowStructArray *array); - -G_END_DECLS +#include +#include diff --git a/c_glib/arrow-glib/array.hpp b/c_glib/arrow-glib/array.hpp index d2dff22c48c..e575c425380 100644 --- a/c_glib/arrow-glib/array.hpp +++ b/c_glib/arrow-glib/array.hpp @@ -19,9 +19,5 @@ #pragma once -#include - -#include - -GArrowArray *garrow_array_new_raw(std::shared_ptr *arrow_array); -std::shared_ptr garrow_array_get_raw(GArrowArray *array); +#include +#include diff --git a/c_glib/arrow-glib/array.cpp b/c_glib/arrow-glib/basic-array.cpp similarity index 90% rename from c_glib/arrow-glib/array.cpp rename to c_glib/arrow-glib/basic-array.cpp index 4945ca3cfe9..0698a040980 100644 --- a/c_glib/arrow-glib/array.cpp +++ b/c_glib/arrow-glib/basic-array.cpp @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include @@ -86,9 +86,9 @@ garrow_primitive_array_new(GArrowDataType *data_type, G_BEGIN_DECLS /** - * SECTION: array - * @section_id: array-classes - * @title: Array classes + * SECTION: basic-array + * @section_id: basic-array-classes + * @title: Basic array classes * @include: arrow-glib/arrow-glib.h * * #GArrowArray is a base class for all array classes such as @@ -194,15 +194,6 @@ G_BEGIN_DECLS * nanoseconds since midnight in 64-bit signed integer array. It can * store zero or more time data. If you don't have Arrow format data, * you need to use #GArrowTime64ArrayBuilder to create a new array. - * - * #GArrowListArray is a class for list array. It can store zero or - * more list data. If you don't have Arrow format data, you need to - * use #GArrowListArrayBuilder to create a new array. - * - * #GArrowStructArray is a class for struct array. It can store zero - * or more structs. One struct has zero or more fields. If you don't - * have Arrow format data, you need to use #GArrowStructArrayBuilder - * to create a new array. */ typedef struct GArrowArrayPrivate_ { @@ -2028,195 +2019,6 @@ garrow_time64_array_get_values(GArrowTime64Array *array, return reinterpret_cast(values); } - -G_DEFINE_TYPE(GArrowListArray, \ - garrow_list_array, \ - GARROW_TYPE_ARRAY) - -static void -garrow_list_array_init(GArrowListArray *object) -{ -} - -static void -garrow_list_array_class_init(GArrowListArrayClass *klass) -{ -} - -/** - * garrow_list_array_new: - * @length: The number of elements. - * @value_offsets: The offsets of @values in Arrow format. - * @values: The values as #GArrowArray. - * @null_bitmap: (nullable): The bitmap that shows null elements. The - * N-th element is null when the N-th bit is 0, not null otherwise. - * If the array has no null elements, the bitmap must be %NULL and - * @n_nulls is 0. - * @n_nulls: The number of null elements. If -1 is specified, the - * number of nulls are computed from @null_bitmap. - * - * Returns: A newly created #GArrowListArray. - * - * Since: 0.4.0 - */ -GArrowListArray * -garrow_list_array_new(gint64 length, - GArrowBuffer *value_offsets, - GArrowArray *values, - GArrowBuffer *null_bitmap, - gint64 n_nulls) -{ - const auto arrow_value_offsets = garrow_buffer_get_raw(value_offsets); - const auto arrow_values = garrow_array_get_raw(values); - const auto arrow_bitmap = garrow_buffer_get_raw(null_bitmap); - auto arrow_data_type = arrow::list(arrow_values->type()); - auto arrow_list_array = - std::make_shared(arrow_data_type, - length, - arrow_value_offsets, - arrow_values, - arrow_bitmap, - n_nulls); - auto arrow_array = - std::static_pointer_cast(arrow_list_array); - return GARROW_LIST_ARRAY(garrow_array_new_raw(&arrow_array)); -} - -/** - * garrow_list_array_get_value_type: - * @array: A #GArrowListArray. - * - * Returns: (transfer full): The data type of value in each list. - */ -GArrowDataType * -garrow_list_array_get_value_type(GArrowListArray *array) -{ - auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto arrow_list_array = - static_cast(arrow_array.get()); - auto arrow_value_type = arrow_list_array->value_type(); - return garrow_data_type_new_raw(&arrow_value_type); -} - -/** - * garrow_list_array_get_value: - * @array: A #GArrowListArray. - * @i: The index of the target value. - * - * Returns: (transfer full): The i-th list. - */ -GArrowArray * -garrow_list_array_get_value(GArrowListArray *array, - gint64 i) -{ - auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto arrow_list_array = - static_cast(arrow_array.get()); - auto arrow_list = - arrow_list_array->values()->Slice(arrow_list_array->value_offset(i), - arrow_list_array->value_length(i)); - return garrow_array_new_raw(&arrow_list); -} - - -G_DEFINE_TYPE(GArrowStructArray, \ - garrow_struct_array, \ - GARROW_TYPE_ARRAY) - -static void -garrow_struct_array_init(GArrowStructArray *object) -{ -} - -static void -garrow_struct_array_class_init(GArrowStructArrayClass *klass) -{ -} - -/** - * garrow_struct_array_new: - * @data_type: The data type of the struct. - * @length: The number of elements. - * @children: (element-type GArrowArray): The arrays for each field - * as #GList of #GArrowArray. - * @null_bitmap: (nullable): The bitmap that shows null elements. The - * N-th element is null when the N-th bit is 0, not null otherwise. - * If the array has no null elements, the bitmap must be %NULL and - * @n_nulls is 0. - * @n_nulls: The number of null elements. If -1 is specified, the - * number of nulls are computed from @null_bitmap. - * - * Returns: A newly created #GArrowStructArray. - * - * Since: 0.4.0 - */ -GArrowStructArray * -garrow_struct_array_new(GArrowDataType *data_type, - gint64 length, - GList *children, - GArrowBuffer *null_bitmap, - gint64 n_nulls) -{ - const auto arrow_data_type = garrow_data_type_get_raw(data_type); - std::vector> arrow_children; - for (GList *node = children; node; node = node->next) { - GArrowArray *child = GARROW_ARRAY(node->data); - arrow_children.push_back(garrow_array_get_raw(child)); - } - const auto arrow_bitmap = garrow_buffer_get_raw(null_bitmap); - auto arrow_struct_array = - std::make_shared(arrow_data_type, - length, - arrow_children, - arrow_bitmap, - n_nulls); - auto arrow_array = - std::static_pointer_cast(arrow_struct_array); - return GARROW_STRUCT_ARRAY(garrow_array_new_raw(&arrow_array)); -} - -/** - * garrow_struct_array_get_field - * @array: A #GArrowStructArray. - * @i: The index of the field in the struct. - * - * Returns: (transfer full): The i-th field. - */ -GArrowArray * -garrow_struct_array_get_field(GArrowStructArray *array, - gint i) -{ - auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - auto arrow_struct_array = - static_cast(arrow_array.get()); - auto arrow_field = arrow_struct_array->field(i); - return garrow_array_new_raw(&arrow_field); -} - -/** - * garrow_struct_array_get_fields - * @array: A #GArrowStructArray. - * - * Returns: (element-type GArrowArray) (transfer full): - * The fields in the struct. - */ -GList * -garrow_struct_array_get_fields(GArrowStructArray *array) -{ - const auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); - const auto arrow_struct_array = - static_cast(arrow_array.get()); - - GList *fields = NULL; - for (int i = 0; i < arrow_struct_array->num_fields(); ++i) { - auto arrow_field = arrow_struct_array->field(i); - GArrowArray *field = garrow_array_new_raw(&arrow_field); - fields = g_list_prepend(fields, field); - } - - return g_list_reverse(fields); -} - G_END_DECLS GArrowArray * diff --git a/c_glib/arrow-glib/basic-array.h b/c_glib/arrow-glib/basic-array.h new file mode 100644 index 00000000000..c01a04f07d8 --- /dev/null +++ b/c_glib/arrow-glib/basic-array.h @@ -0,0 +1,1115 @@ +/* + * 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 +#include +#include + +G_BEGIN_DECLS + +#define GARROW_TYPE_ARRAY (garrow_array_get_type()) +G_DECLARE_DERIVABLE_TYPE(GArrowArray, + garrow_array, + GARROW, + ARRAY, + GObject) +struct _GArrowArrayClass +{ + GObjectClass parent_class; +}; + +gboolean garrow_array_equal (GArrowArray *array, + GArrowArray *other_array); +gboolean garrow_array_equal_approx(GArrowArray *array, + GArrowArray *other_array); +gboolean garrow_array_equal_range (GArrowArray *array, + gint64 start_index, + GArrowArray *other_array, + gint64 other_start_index, + gint64 end_index); + +gboolean garrow_array_is_null (GArrowArray *array, + gint64 i); +gboolean garrow_array_is_valid (GArrowArray *array, + gint64 i); +gint64 garrow_array_get_length (GArrowArray *array); +gint64 garrow_array_get_offset (GArrowArray *array); +gint64 garrow_array_get_n_nulls (GArrowArray *array); +GArrowBuffer *garrow_array_get_null_bitmap(GArrowArray *array); +GArrowDataType *garrow_array_get_value_data_type(GArrowArray *array); +GArrowType garrow_array_get_value_type(GArrowArray *array); +GArrowArray *garrow_array_slice (GArrowArray *array, + gint64 offset, + gint64 length); +gchar *garrow_array_to_string (GArrowArray *array, + GError **error); + +GArrowArray *garrow_array_cast (GArrowArray *array, + GArrowDataType *target_data_type, + GArrowCastOptions *options, + GError **error); + +#define GARROW_TYPE_NULL_ARRAY \ + (garrow_null_array_get_type()) +#define GARROW_NULL_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_NULL_ARRAY, \ + GArrowNullArray)) +#define GARROW_NULL_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_NULL_ARRAY, \ + GArrowNullArrayClass)) +#define GARROW_IS_NULL_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_NULL_ARRAY)) +#define GARROW_IS_NULL_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_NULL_ARRAY)) +#define GARROW_NULL_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_NULL_ARRAY, \ + GArrowNullArrayClass)) + +typedef struct _GArrowNullArray GArrowNullArray; +typedef struct _GArrowNullArrayClass GArrowNullArrayClass; + +/** + * GArrowNullArray: + * + * It wraps `arrow::NullArray`. + */ +struct _GArrowNullArray +{ + /*< private >*/ + GArrowArray parent_instance; +}; + +struct _GArrowNullArrayClass +{ + GArrowArrayClass parent_class; +}; + +GType garrow_null_array_get_type(void) G_GNUC_CONST; + +GArrowNullArray *garrow_null_array_new(gint64 length); + + +#define GARROW_TYPE_PRIMITIVE_ARRAY \ + (garrow_primitive_array_get_type()) +#define GARROW_PRIMITIVE_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_PRIMITIVE_ARRAY, \ + GArrowPrimitiveArray)) +#define GARROW_PRIMITIVE_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_PRIMITIVE_ARRAY, \ + GArrowPrimitiveArrayClass)) +#define GARROW_IS_PRIMITIVE_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_PRIMITIVE_ARRAY)) +#define GARROW_IS_PRIMITIVE_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_PRIMITIVE_ARRAY)) +#define GARROW_PRIMITIVE_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_PRIMITIVE_ARRAY, \ + GArrowPrimitiveArrayClass)) + +typedef struct _GArrowPrimitiveArray GArrowPrimitiveArray; +typedef struct _GArrowPrimitiveArrayClass GArrowPrimitiveArrayClass; + +/** + * GArrowPrimitiveArray: + * + * It wraps `arrow::PrimitiveArray`. + */ +struct _GArrowPrimitiveArray +{ + /*< private >*/ + GArrowArray parent_instance; +}; + +struct _GArrowPrimitiveArrayClass +{ + GArrowArrayClass parent_class; +}; + +GType garrow_primitive_array_get_type(void) G_GNUC_CONST; + +GArrowBuffer *garrow_primitive_array_get_buffer(GArrowPrimitiveArray *array); + + +#define GARROW_TYPE_BOOLEAN_ARRAY \ + (garrow_boolean_array_get_type()) +#define GARROW_BOOLEAN_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_BOOLEAN_ARRAY, \ + GArrowBooleanArray)) +#define GARROW_BOOLEAN_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_BOOLEAN_ARRAY, \ + GArrowBooleanArrayClass)) +#define GARROW_IS_BOOLEAN_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_BOOLEAN_ARRAY)) +#define GARROW_IS_BOOLEAN_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_BOOLEAN_ARRAY)) +#define GARROW_BOOLEAN_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_BOOLEAN_ARRAY, \ + GArrowBooleanArrayClass)) + +typedef struct _GArrowBooleanArray GArrowBooleanArray; +typedef struct _GArrowBooleanArrayClass GArrowBooleanArrayClass; + +/** + * GArrowBooleanArray: + * + * It wraps `arrow::BooleanArray`. + */ +struct _GArrowBooleanArray +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowBooleanArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_boolean_array_get_type (void) G_GNUC_CONST; + +GArrowBooleanArray *garrow_boolean_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +gboolean garrow_boolean_array_get_value (GArrowBooleanArray *array, + gint64 i); +gboolean *garrow_boolean_array_get_values(GArrowBooleanArray *array, + gint64 *length); + + +#define GARROW_TYPE_INT8_ARRAY \ + (garrow_int8_array_get_type()) +#define GARROW_INT8_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_INT8_ARRAY, \ + GArrowInt8Array)) +#define GARROW_INT8_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_INT8_ARRAY, \ + GArrowInt8ArrayClass)) +#define GARROW_IS_INT8_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_INT8_ARRAY)) +#define GARROW_IS_INT8_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_INT8_ARRAY)) +#define GARROW_INT8_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_INT8_ARRAY, \ + GArrowInt8ArrayClass)) + +typedef struct _GArrowInt8Array GArrowInt8Array; +typedef struct _GArrowInt8ArrayClass GArrowInt8ArrayClass; + +/** + * GArrowInt8Array: + * + * It wraps `arrow::Int8Array`. + */ +struct _GArrowInt8Array +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowInt8ArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_int8_array_get_type(void) G_GNUC_CONST; + +GArrowInt8Array *garrow_int8_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +gint8 garrow_int8_array_get_value(GArrowInt8Array *array, + gint64 i); +const gint8 *garrow_int8_array_get_values(GArrowInt8Array *array, + gint64 *length); + + +#define GARROW_TYPE_UINT8_ARRAY \ + (garrow_uint8_array_get_type()) +#define GARROW_UINT8_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_UINT8_ARRAY, \ + GArrowUInt8Array)) +#define GARROW_UINT8_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_UINT8_ARRAY, \ + GArrowUInt8ArrayClass)) +#define GARROW_IS_UINT8_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_UINT8_ARRAY)) +#define GARROW_IS_UINT8_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_UINT8_ARRAY)) +#define GARROW_UINT8_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_UINT8_ARRAY, \ + GArrowUInt8ArrayClass)) + +typedef struct _GArrowUInt8Array GArrowUInt8Array; +typedef struct _GArrowUInt8ArrayClass GArrowUInt8ArrayClass; + +/** + * GArrowUInt8Array: + * + * It wraps `arrow::UInt8Array`. + */ +struct _GArrowUInt8Array +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowUInt8ArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_uint8_array_get_type(void) G_GNUC_CONST; + +GArrowUInt8Array *garrow_uint8_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +guint8 garrow_uint8_array_get_value(GArrowUInt8Array *array, + gint64 i); +const guint8 *garrow_uint8_array_get_values(GArrowUInt8Array *array, + gint64 *length); + + +#define GARROW_TYPE_INT16_ARRAY \ + (garrow_int16_array_get_type()) +#define GARROW_INT16_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_INT16_ARRAY, \ + GArrowInt16Array)) +#define GARROW_INT16_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_INT16_ARRAY, \ + GArrowInt16ArrayClass)) +#define GARROW_IS_INT16_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_INT16_ARRAY)) +#define GARROW_IS_INT16_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_INT16_ARRAY)) +#define GARROW_INT16_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_INT16_ARRAY, \ + GArrowInt16ArrayClass)) + +typedef struct _GArrowInt16Array GArrowInt16Array; +typedef struct _GArrowInt16ArrayClass GArrowInt16ArrayClass; + +/** + * GArrowInt16Array: + * + * It wraps `arrow::Int16Array`. + */ +struct _GArrowInt16Array +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowInt16ArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_int16_array_get_type(void) G_GNUC_CONST; + +GArrowInt16Array *garrow_int16_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +gint16 garrow_int16_array_get_value(GArrowInt16Array *array, + gint64 i); +const gint16 *garrow_int16_array_get_values(GArrowInt16Array *array, + gint64 *length); + + +#define GARROW_TYPE_UINT16_ARRAY \ + (garrow_uint16_array_get_type()) +#define GARROW_UINT16_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_UINT16_ARRAY, \ + GArrowUInt16Array)) +#define GARROW_UINT16_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_UINT16_ARRAY, \ + GArrowUInt16ArrayClass)) +#define GARROW_IS_UINT16_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_UINT16_ARRAY)) +#define GARROW_IS_UINT16_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_UINT16_ARRAY)) +#define GARROW_UINT16_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_UINT16_ARRAY, \ + GArrowUInt16ArrayClass)) + +typedef struct _GArrowUInt16Array GArrowUInt16Array; +typedef struct _GArrowUInt16ArrayClass GArrowUInt16ArrayClass; + +/** + * GArrowUInt16Array: + * + * It wraps `arrow::UInt16Array`. + */ +struct _GArrowUInt16Array +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowUInt16ArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_uint16_array_get_type(void) G_GNUC_CONST; + +GArrowUInt16Array *garrow_uint16_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +guint16 garrow_uint16_array_get_value(GArrowUInt16Array *array, + gint64 i); +const guint16 *garrow_uint16_array_get_values(GArrowUInt16Array *array, + gint64 *length); + + +#define GARROW_TYPE_INT32_ARRAY \ + (garrow_int32_array_get_type()) +#define GARROW_INT32_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_INT32_ARRAY, \ + GArrowInt32Array)) +#define GARROW_INT32_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_INT32_ARRAY, \ + GArrowInt32ArrayClass)) +#define GARROW_IS_INT32_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_INT32_ARRAY)) +#define GARROW_IS_INT32_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_INT32_ARRAY)) +#define GARROW_INT32_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_INT32_ARRAY, \ + GArrowInt32ArrayClass)) + +typedef struct _GArrowInt32Array GArrowInt32Array; +typedef struct _GArrowInt32ArrayClass GArrowInt32ArrayClass; + +/** + * GArrowInt32Array: + * + * It wraps `arrow::Int32Array`. + */ +struct _GArrowInt32Array +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowInt32ArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_int32_array_get_type(void) G_GNUC_CONST; + +GArrowInt32Array *garrow_int32_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +gint32 garrow_int32_array_get_value(GArrowInt32Array *array, + gint64 i); +const gint32 *garrow_int32_array_get_values(GArrowInt32Array *array, + gint64 *length); + + +#define GARROW_TYPE_UINT32_ARRAY \ + (garrow_uint32_array_get_type()) +#define GARROW_UINT32_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_UINT32_ARRAY, \ + GArrowUInt32Array)) +#define GARROW_UINT32_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_UINT32_ARRAY, \ + GArrowUInt32ArrayClass)) +#define GARROW_IS_UINT32_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_UINT32_ARRAY)) +#define GARROW_IS_UINT32_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_UINT32_ARRAY)) +#define GARROW_UINT32_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_UINT32_ARRAY, \ + GArrowUInt32ArrayClass)) + +typedef struct _GArrowUInt32Array GArrowUInt32Array; +typedef struct _GArrowUInt32ArrayClass GArrowUInt32ArrayClass; + +/** + * GArrowUInt32Array: + * + * It wraps `arrow::UInt32Array`. + */ +struct _GArrowUInt32Array +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowUInt32ArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_uint32_array_get_type(void) G_GNUC_CONST; + +GArrowUInt32Array *garrow_uint32_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +guint32 garrow_uint32_array_get_value(GArrowUInt32Array *array, + gint64 i); +const guint32 *garrow_uint32_array_get_values(GArrowUInt32Array *array, + gint64 *length); + + +#define GARROW_TYPE_INT64_ARRAY \ + (garrow_int64_array_get_type()) +#define GARROW_INT64_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_INT64_ARRAY, \ + GArrowInt64Array)) +#define GARROW_INT64_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_INT64_ARRAY, \ + GArrowInt64ArrayClass)) +#define GARROW_IS_INT64_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_INT64_ARRAY)) +#define GARROW_IS_INT64_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_INT64_ARRAY)) +#define GARROW_INT64_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_INT64_ARRAY, \ + GArrowInt64ArrayClass)) + +typedef struct _GArrowInt64Array GArrowInt64Array; +typedef struct _GArrowInt64ArrayClass GArrowInt64ArrayClass; + +/** + * GArrowInt64Array: + * + * It wraps `arrow::Int64Array`. + */ +struct _GArrowInt64Array +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowInt64ArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_int64_array_get_type(void) G_GNUC_CONST; + +GArrowInt64Array *garrow_int64_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +gint64 garrow_int64_array_get_value(GArrowInt64Array *array, + gint64 i); +const gint64 *garrow_int64_array_get_values(GArrowInt64Array *array, + gint64 *length); + + +#define GARROW_TYPE_UINT64_ARRAY \ + (garrow_uint64_array_get_type()) +#define GARROW_UINT64_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_UINT64_ARRAY, \ + GArrowUInt64Array)) +#define GARROW_UINT64_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_UINT64_ARRAY, \ + GArrowUInt64ArrayClass)) +#define GARROW_IS_UINT64_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_UINT64_ARRAY)) +#define GARROW_IS_UINT64_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_UINT64_ARRAY)) +#define GARROW_UINT64_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_UINT64_ARRAY, \ + GArrowUInt64ArrayClass)) + +typedef struct _GArrowUInt64Array GArrowUInt64Array; +typedef struct _GArrowUInt64ArrayClass GArrowUInt64ArrayClass; + +/** + * GArrowUInt64Array: + * + * It wraps `arrow::UInt64Array`. + */ +struct _GArrowUInt64Array +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowUInt64ArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_uint64_array_get_type(void) G_GNUC_CONST; + +GArrowUInt64Array *garrow_uint64_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +guint64 garrow_uint64_array_get_value(GArrowUInt64Array *array, + gint64 i); +const guint64 *garrow_uint64_array_get_values(GArrowUInt64Array *array, + gint64 *length); + + +#define GARROW_TYPE_FLOAT_ARRAY \ + (garrow_float_array_get_type()) +#define GARROW_FLOAT_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_FLOAT_ARRAY, \ + GArrowFloatArray)) +#define GARROW_FLOAT_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_FLOAT_ARRAY, \ + GArrowFloatArrayClass)) +#define GARROW_IS_FLOAT_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_FLOAT_ARRAY)) +#define GARROW_IS_FLOAT_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_FLOAT_ARRAY)) +#define GARROW_FLOAT_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_FLOAT_ARRAY, \ + GArrowFloatArrayClass)) + +typedef struct _GArrowFloatArray GArrowFloatArray; +typedef struct _GArrowFloatArrayClass GArrowFloatArrayClass; + +/** + * GArrowFloatArray: + * + * It wraps `arrow::FloatArray`. + */ +struct _GArrowFloatArray +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowFloatArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_float_array_get_type(void) G_GNUC_CONST; + +GArrowFloatArray *garrow_float_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +gfloat garrow_float_array_get_value(GArrowFloatArray *array, + gint64 i); +const gfloat *garrow_float_array_get_values(GArrowFloatArray *array, + gint64 *length); + + +#define GARROW_TYPE_DOUBLE_ARRAY \ + (garrow_double_array_get_type()) +#define GARROW_DOUBLE_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_DOUBLE_ARRAY, \ + GArrowDoubleArray)) +#define GARROW_DOUBLE_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_DOUBLE_ARRAY, \ + GArrowDoubleArrayClass)) +#define GARROW_IS_DOUBLE_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_DOUBLE_ARRAY)) +#define GARROW_IS_DOUBLE_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_DOUBLE_ARRAY)) +#define GARROW_DOUBLE_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_DOUBLE_ARRAY, \ + GArrowDoubleArrayClass)) + +typedef struct _GArrowDoubleArray GArrowDoubleArray; +typedef struct _GArrowDoubleArrayClass GArrowDoubleArrayClass; + +/** + * GArrowDoubleArray: + * + * It wraps `arrow::DoubleArray`. + */ +struct _GArrowDoubleArray +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowDoubleArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_double_array_get_type(void) G_GNUC_CONST; + +GArrowDoubleArray *garrow_double_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +gdouble garrow_double_array_get_value(GArrowDoubleArray *array, + gint64 i); +const gdouble *garrow_double_array_get_values(GArrowDoubleArray *array, + gint64 *length); + + +#define GARROW_TYPE_BINARY_ARRAY \ + (garrow_binary_array_get_type()) +#define GARROW_BINARY_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_BINARY_ARRAY, \ + GArrowBinaryArray)) +#define GARROW_BINARY_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_BINARY_ARRAY, \ + GArrowBinaryArrayClass)) +#define GARROW_IS_BINARY_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_BINARY_ARRAY)) +#define GARROW_IS_BINARY_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_BINARY_ARRAY)) +#define GARROW_BINARY_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_BINARY_ARRAY, \ + GArrowBinaryArrayClass)) + +typedef struct _GArrowBinaryArray GArrowBinaryArray; +typedef struct _GArrowBinaryArrayClass GArrowBinaryArrayClass; + +/** + * GArrowBinaryArray: + * + * It wraps `arrow::BinaryArray`. + */ +struct _GArrowBinaryArray +{ + /*< private >*/ + GArrowArray parent_instance; +}; + +struct _GArrowBinaryArrayClass +{ + GArrowArrayClass parent_class; +}; + +GType garrow_binary_array_get_type(void) G_GNUC_CONST; + +GArrowBinaryArray *garrow_binary_array_new(gint64 length, + GArrowBuffer *value_offsets, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +GBytes *garrow_binary_array_get_value(GArrowBinaryArray *array, + gint64 i); +GArrowBuffer *garrow_binary_array_get_buffer(GArrowBinaryArray *array); +GArrowBuffer *garrow_binary_array_get_offsets_buffer(GArrowBinaryArray *array); + +#define GARROW_TYPE_STRING_ARRAY \ + (garrow_string_array_get_type()) +#define GARROW_STRING_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_STRING_ARRAY, \ + GArrowStringArray)) +#define GARROW_STRING_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_STRING_ARRAY, \ + GArrowStringArrayClass)) +#define GARROW_IS_STRING_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_STRING_ARRAY)) +#define GARROW_IS_STRING_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_STRING_ARRAY)) +#define GARROW_STRING_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_STRING_ARRAY, \ + GArrowStringArrayClass)) + +typedef struct _GArrowStringArray GArrowStringArray; +typedef struct _GArrowStringArrayClass GArrowStringArrayClass; + +/** + * GArrowStringArray: + * + * It wraps `arrow::StringArray`. + */ +struct _GArrowStringArray +{ + /*< private >*/ + GArrowBinaryArray parent_instance; +}; + +struct _GArrowStringArrayClass +{ + GArrowBinaryArrayClass parent_class; +}; + +GType garrow_string_array_get_type(void) G_GNUC_CONST; + +GArrowStringArray *garrow_string_array_new(gint64 length, + GArrowBuffer *value_offsets, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +gchar *garrow_string_array_get_string(GArrowStringArray *array, + gint64 i); + + +#define GARROW_TYPE_DATE32_ARRAY \ + (garrow_date32_array_get_type()) +#define GARROW_DATE32_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_DATE32_ARRAY, \ + GArrowDate32Array)) +#define GARROW_DATE32_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_DATE32_ARRAY, \ + GArrowDate32ArrayClass)) +#define GARROW_IS_DATE32_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_DATE32_ARRAY)) +#define GARROW_IS_DATE32_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_DATE32_ARRAY)) +#define GARROW_DATE32_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_DATE32_ARRAY, \ + GArrowDate32ArrayClass)) + +typedef struct _GArrowDate32Array GArrowDate32Array; +typedef struct _GArrowDate32ArrayClass GArrowDate32ArrayClass; + +/** + * GArrowDate32Array: + * + * It wraps `arrow::Date32Array`. + */ +struct _GArrowDate32Array +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowDate32ArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_date32_array_get_type(void) G_GNUC_CONST; + +GArrowDate32Array *garrow_date32_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +gint32 garrow_date32_array_get_value(GArrowDate32Array *array, + gint64 i); +const gint32 *garrow_date32_array_get_values(GArrowDate32Array *array, + gint64 *length); + + +#define GARROW_TYPE_DATE64_ARRAY \ + (garrow_date64_array_get_type()) +#define GARROW_DATE64_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_DATE64_ARRAY, \ + GArrowDate64Array)) +#define GARROW_DATE64_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_DATE64_ARRAY, \ + GArrowDate64ArrayClass)) +#define GARROW_IS_DATE64_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_DATE64_ARRAY)) +#define GARROW_IS_DATE64_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_DATE64_ARRAY)) +#define GARROW_DATE64_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_DATE64_ARRAY, \ + GArrowDate64ArrayClass)) + +typedef struct _GArrowDate64Array GArrowDate64Array; +typedef struct _GArrowDate64ArrayClass GArrowDate64ArrayClass; + +/** + * GArrowDate64Array: + * + * It wraps `arrow::Date64Array`. + */ +struct _GArrowDate64Array +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowDate64ArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_date64_array_get_type(void) G_GNUC_CONST; + +GArrowDate64Array *garrow_date64_array_new(gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +gint64 garrow_date64_array_get_value(GArrowDate64Array *array, + gint64 i); +const gint64 *garrow_date64_array_get_values(GArrowDate64Array *array, + gint64 *length); + + +#define GARROW_TYPE_TIMESTAMP_ARRAY \ + (garrow_timestamp_array_get_type()) +#define GARROW_TIMESTAMP_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_TIMESTAMP_ARRAY, \ + GArrowTimestampArray)) +#define GARROW_TIMESTAMP_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_TIMESTAMP_ARRAY, \ + GArrowTimestampArrayClass)) +#define GARROW_IS_TIMESTAMP_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_TIMESTAMP_ARRAY)) +#define GARROW_IS_TIMESTAMP_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_TIMESTAMP_ARRAY)) +#define GARROW_TIMESTAMP_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_TIMESTAMP_ARRAY, \ + GArrowTimestampArrayClass)) + +typedef struct _GArrowTimestampArray GArrowTimestampArray; +typedef struct _GArrowTimestampArrayClass GArrowTimestampArrayClass; + +/** + * GArrowTimestampArray: + * + * It wraps `arrow::TimestampArray`. + */ +struct _GArrowTimestampArray +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowTimestampArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_timestamp_array_get_type(void) G_GNUC_CONST; + +GArrowTimestampArray *garrow_timestamp_array_new(GArrowTimestampDataType *data_type, + gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +gint64 garrow_timestamp_array_get_value(GArrowTimestampArray *array, + gint64 i); +const gint64 *garrow_timestamp_array_get_values(GArrowTimestampArray *array, + gint64 *length); + + +#define GARROW_TYPE_TIME32_ARRAY \ + (garrow_time32_array_get_type()) +#define GARROW_TIME32_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_TIME32_ARRAY, \ + GArrowTime32Array)) +#define GARROW_TIME32_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_TIME32_ARRAY, \ + GArrowTime32ArrayClass)) +#define GARROW_IS_TIME32_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_TIME32_ARRAY)) +#define GARROW_IS_TIME32_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_TIME32_ARRAY)) +#define GARROW_TIME32_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_TIME32_ARRAY, \ + GArrowTime32ArrayClass)) + +typedef struct _GArrowTime32Array GArrowTime32Array; +typedef struct _GArrowTime32ArrayClass GArrowTime32ArrayClass; + +/** + * GArrowTime32Array: + * + * It wraps `arrow::Time32Array`. + */ +struct _GArrowTime32Array +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowTime32ArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_time32_array_get_type(void) G_GNUC_CONST; + +GArrowTime32Array *garrow_time32_array_new(GArrowTime32DataType *data_type, + gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +gint32 garrow_time32_array_get_value(GArrowTime32Array *array, + gint64 i); +const gint32 *garrow_time32_array_get_values(GArrowTime32Array *array, + gint64 *length); + + +#define GARROW_TYPE_TIME64_ARRAY \ + (garrow_time64_array_get_type()) +#define GARROW_TIME64_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_TIME64_ARRAY, \ + GArrowTime64Array)) +#define GARROW_TIME64_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_TIME64_ARRAY, \ + GArrowTime64ArrayClass)) +#define GARROW_IS_TIME64_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_TIME64_ARRAY)) +#define GARROW_IS_TIME64_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_TIME64_ARRAY)) +#define GARROW_TIME64_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_TIME64_ARRAY, \ + GArrowTime64ArrayClass)) + +typedef struct _GArrowTime64Array GArrowTime64Array; +typedef struct _GArrowTime64ArrayClass GArrowTime64ArrayClass; + +/** + * GArrowTime64Array: + * + * It wraps `arrow::Time64Array`. + */ +struct _GArrowTime64Array +{ + /*< private >*/ + GArrowPrimitiveArray parent_instance; +}; + +struct _GArrowTime64ArrayClass +{ + GArrowPrimitiveArrayClass parent_class; +}; + +GType garrow_time64_array_get_type(void) G_GNUC_CONST; + +GArrowTime64Array *garrow_time64_array_new(GArrowTime64DataType *data_type, + gint64 length, + GArrowBuffer *data, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +gint64 garrow_time64_array_get_value(GArrowTime64Array *array, + gint64 i); +const gint64 *garrow_time64_array_get_values(GArrowTime64Array *array, + gint64 *length); + +G_END_DECLS diff --git a/c_glib/arrow-glib/basic-array.hpp b/c_glib/arrow-glib/basic-array.hpp new file mode 100644 index 00000000000..52b94a51f3d --- /dev/null +++ b/c_glib/arrow-glib/basic-array.hpp @@ -0,0 +1,27 @@ +/* + * 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 + +#include + +GArrowArray *garrow_array_new_raw(std::shared_ptr *arrow_array); +std::shared_ptr garrow_array_get_raw(GArrowArray *array); diff --git a/c_glib/arrow-glib/basic-data-type.cpp b/c_glib/arrow-glib/basic-data-type.cpp index 62f8a7e4d2f..dcafe06d675 100644 --- a/c_glib/arrow-glib/basic-data-type.cpp +++ b/c_glib/arrow-glib/basic-data-type.cpp @@ -220,6 +220,37 @@ garrow_data_type_get_id(GArrowDataType *data_type) } +G_DEFINE_ABSTRACT_TYPE(GArrowFixedWidthDataType, \ + garrow_fixed_width_data_type, \ + GARROW_TYPE_DATA_TYPE) + +static void +garrow_fixed_width_data_type_init(GArrowFixedWidthDataType *object) +{ +} + +static void +garrow_fixed_width_data_type_class_init(GArrowFixedWidthDataTypeClass *klass) +{ +} + +/** + * garrow_fixed_width_data_type_get_id: + * @data_type: A #GArrowFixedWidthDataType. + * + * Returns: The number of bits for one data. + */ +gint +garrow_fixed_width_data_type_get_bit_width(GArrowFixedWidthDataType *data_type) +{ + const auto arrow_data_type = + garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); + const auto arrow_fixed_width_type = + std::static_pointer_cast(arrow_data_type); + return arrow_fixed_width_type->bit_width(); +} + + G_DEFINE_TYPE(GArrowNullDataType, \ garrow_null_data_type, \ GARROW_TYPE_DATA_TYPE) @@ -254,7 +285,7 @@ garrow_null_data_type_new(void) G_DEFINE_TYPE(GArrowBooleanDataType, \ garrow_boolean_data_type, \ - GARROW_TYPE_DATA_TYPE) + GARROW_TYPE_FIXED_WIDTH_DATA_TYPE) static void garrow_boolean_data_type_init(GArrowBooleanDataType *object) @@ -1015,12 +1046,15 @@ garrow_data_type_new_raw(std::shared_ptr *arrow_data_type) case arrow::Type::type::STRUCT: type = GARROW_TYPE_STRUCT_DATA_TYPE; break; + case arrow::Type::type::DICTIONARY: + type = GARROW_TYPE_DICTIONARY_DATA_TYPE; + break; default: type = GARROW_TYPE_DATA_TYPE; break; } data_type = GARROW_DATA_TYPE(g_object_new(type, - "data_type", arrow_data_type, + "data-type", arrow_data_type, NULL)); return data_type; } diff --git a/c_glib/arrow-glib/basic-data-type.h b/c_glib/arrow-glib/basic-data-type.h index d3d52c6120d..bc0192f1b00 100644 --- a/c_glib/arrow-glib/basic-data-type.h +++ b/c_glib/arrow-glib/basic-data-type.h @@ -19,57 +19,45 @@ #pragma once +#include #include G_BEGIN_DECLS -#define GARROW_TYPE_DATA_TYPE \ - (garrow_data_type_get_type()) -#define GARROW_DATA_TYPE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_DATA_TYPE, \ - GArrowDataType)) -#define GARROW_DATA_TYPE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_DATA_TYPE, \ - GArrowDataTypeClass)) -#define GARROW_IS_DATA_TYPE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_DATA_TYPE)) -#define GARROW_IS_DATA_TYPE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_DATA_TYPE)) -#define GARROW_DATA_TYPE_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_DATA_TYPE, \ - GArrowDataTypeClass)) - -typedef struct _GArrowDataType GArrowDataType; -typedef struct _GArrowDataTypeClass GArrowDataTypeClass; - -/** - * GArrowDataType: - * - * It wraps `arrow::DataType`. - */ -struct _GArrowDataType -{ - /*< private >*/ - GObject parent_instance; -}; - +#define GARROW_TYPE_DATA_TYPE (garrow_data_type_get_type()) +G_DECLARE_DERIVABLE_TYPE(GArrowDataType, + garrow_data_type, + GARROW, + DATA_TYPE, + GObject) struct _GArrowDataTypeClass { GObjectClass parent_class; }; -GType garrow_data_type_get_type (void) G_GNUC_CONST; gboolean garrow_data_type_equal (GArrowDataType *data_type, GArrowDataType *other_data_type); gchar *garrow_data_type_to_string (GArrowDataType *data_type); GArrowType garrow_data_type_get_id (GArrowDataType *data_type); +#define GARROW_TYPE_FIXED_WIDTH_DATA_TYPE (garrow_fixed_width_data_type_get_type()) +G_DECLARE_DERIVABLE_TYPE(GArrowFixedWidthDataType, + garrow_fixed_width_data_type, + GARROW, + FIXED_WIDTH_DATA_TYPE, + GArrowDataType) +struct _GArrowFixedWidthDataTypeClass +{ + GArrowDataTypeClass parent_class; +}; + +gint garrow_fixed_width_data_type_get_bit_width(GArrowFixedWidthDataType *data_type); +/* TODO: +GList *garrow_fixed_width_data_type_get_buffer_layout(GArrowFixedWidthDataType *data_type); +*/ + + #define GARROW_TYPE_NULL_DATA_TYPE \ (garrow_null_data_type_get_type()) #define GARROW_NULL_DATA_TYPE(obj) \ @@ -114,47 +102,17 @@ GType garrow_null_data_type_get_type (void) G_GNUC_CONST; GArrowNullDataType *garrow_null_data_type_new (void); -#define GARROW_TYPE_BOOLEAN_DATA_TYPE \ - (garrow_boolean_data_type_get_type()) -#define GARROW_BOOLEAN_DATA_TYPE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - GARROW_TYPE_BOOLEAN_DATA_TYPE, \ - GArrowBooleanDataType)) -#define GARROW_BOOLEAN_DATA_TYPE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass), \ - GARROW_TYPE_BOOLEAN_DATA_TYPE, \ - GArrowBooleanDataTypeClass)) -#define GARROW_IS_BOOLEAN_DATA_TYPE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - GARROW_TYPE_BOOLEAN_DATA_TYPE)) -#define GARROW_IS_BOOLEAN_DATA_TYPE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass), \ - GARROW_TYPE_BOOLEAN_DATA_TYPE)) -#define GARROW_BOOLEAN_DATA_TYPE_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS((obj), \ - GARROW_TYPE_BOOLEAN_DATA_TYPE, \ - GArrowBooleanDataTypeClass)) - -typedef struct _GArrowBooleanDataType GArrowBooleanDataType; -typedef struct _GArrowBooleanDataTypeClass GArrowBooleanDataTypeClass; - -/** - * GArrowBooleanDataType: - * - * It wraps `arrow::BooleanType`. - */ -struct _GArrowBooleanDataType -{ - /*< private >*/ - GArrowDataType parent_instance; -}; - +#define GARROW_TYPE_BOOLEAN_DATA_TYPE (garrow_boolean_data_type_get_type()) +G_DECLARE_DERIVABLE_TYPE(GArrowBooleanDataType, + garrow_boolean_data_type, + GARROW, + BOOLEAN_DATA_TYPE, + GArrowFixedWidthDataType) struct _GArrowBooleanDataTypeClass { - GArrowDataTypeClass parent_class; + GArrowFixedWidthDataTypeClass parent_class; }; -GType garrow_boolean_data_type_get_type (void) G_GNUC_CONST; GArrowBooleanDataType *garrow_boolean_data_type_new (void); diff --git a/c_glib/arrow-glib/composite-array.cpp b/c_glib/arrow-glib/composite-array.cpp new file mode 100644 index 00000000000..445103d3740 --- /dev/null +++ b/c_glib/arrow-glib/composite-array.cpp @@ -0,0 +1,237 @@ +/* + * 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 +#endif + +#include +#include +#include +#include +#include +#include + +G_BEGIN_DECLS + +/** + * SECTION: composite-array + * @section_id: composite-array-classes + * @title: Composite array classes + * @include: arrow-glib/arrow-glib.h + * + * #GArrowListArray is a class for list array. It can store zero or + * more list data. If you don't have Arrow format data, you need to + * use #GArrowListArrayBuilder to create a new array. + * + * #GArrowStructArray is a class for struct array. It can store zero + * or more structs. One struct has zero or more fields. If you don't + * have Arrow format data, you need to use #GArrowStructArrayBuilder + * to create a new array. + */ + +G_DEFINE_TYPE(GArrowListArray, \ + garrow_list_array, \ + GARROW_TYPE_ARRAY) + +static void +garrow_list_array_init(GArrowListArray *object) +{ +} + +static void +garrow_list_array_class_init(GArrowListArrayClass *klass) +{ +} + +/** + * garrow_list_array_new: + * @length: The number of elements. + * @value_offsets: The offsets of @values in Arrow format. + * @values: The values as #GArrowArray. + * @null_bitmap: (nullable): The bitmap that shows null elements. The + * N-th element is null when the N-th bit is 0, not null otherwise. + * If the array has no null elements, the bitmap must be %NULL and + * @n_nulls is 0. + * @n_nulls: The number of null elements. If -1 is specified, the + * number of nulls are computed from @null_bitmap. + * + * Returns: A newly created #GArrowListArray. + * + * Since: 0.4.0 + */ +GArrowListArray * +garrow_list_array_new(gint64 length, + GArrowBuffer *value_offsets, + GArrowArray *values, + GArrowBuffer *null_bitmap, + gint64 n_nulls) +{ + const auto arrow_value_offsets = garrow_buffer_get_raw(value_offsets); + const auto arrow_values = garrow_array_get_raw(values); + const auto arrow_bitmap = garrow_buffer_get_raw(null_bitmap); + auto arrow_data_type = arrow::list(arrow_values->type()); + auto arrow_list_array = + std::make_shared(arrow_data_type, + length, + arrow_value_offsets, + arrow_values, + arrow_bitmap, + n_nulls); + auto arrow_array = + std::static_pointer_cast(arrow_list_array); + return GARROW_LIST_ARRAY(garrow_array_new_raw(&arrow_array)); +} + +/** + * garrow_list_array_get_value_type: + * @array: A #GArrowListArray. + * + * Returns: (transfer full): The data type of value in each list. + */ +GArrowDataType * +garrow_list_array_get_value_type(GArrowListArray *array) +{ + auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); + auto arrow_list_array = + static_cast(arrow_array.get()); + auto arrow_value_type = arrow_list_array->value_type(); + return garrow_data_type_new_raw(&arrow_value_type); +} + +/** + * garrow_list_array_get_value: + * @array: A #GArrowListArray. + * @i: The index of the target value. + * + * Returns: (transfer full): The i-th list. + */ +GArrowArray * +garrow_list_array_get_value(GArrowListArray *array, + gint64 i) +{ + auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); + auto arrow_list_array = + static_cast(arrow_array.get()); + auto arrow_list = + arrow_list_array->values()->Slice(arrow_list_array->value_offset(i), + arrow_list_array->value_length(i)); + return garrow_array_new_raw(&arrow_list); +} + + +G_DEFINE_TYPE(GArrowStructArray, \ + garrow_struct_array, \ + GARROW_TYPE_ARRAY) + +static void +garrow_struct_array_init(GArrowStructArray *object) +{ +} + +static void +garrow_struct_array_class_init(GArrowStructArrayClass *klass) +{ +} + +/** + * garrow_struct_array_new: + * @data_type: The data type of the struct. + * @length: The number of elements. + * @children: (element-type GArrowArray): The arrays for each field + * as #GList of #GArrowArray. + * @null_bitmap: (nullable): The bitmap that shows null elements. The + * N-th element is null when the N-th bit is 0, not null otherwise. + * If the array has no null elements, the bitmap must be %NULL and + * @n_nulls is 0. + * @n_nulls: The number of null elements. If -1 is specified, the + * number of nulls are computed from @null_bitmap. + * + * Returns: A newly created #GArrowStructArray. + * + * Since: 0.4.0 + */ +GArrowStructArray * +garrow_struct_array_new(GArrowDataType *data_type, + gint64 length, + GList *children, + GArrowBuffer *null_bitmap, + gint64 n_nulls) +{ + const auto arrow_data_type = garrow_data_type_get_raw(data_type); + std::vector> arrow_children; + for (GList *node = children; node; node = node->next) { + GArrowArray *child = GARROW_ARRAY(node->data); + arrow_children.push_back(garrow_array_get_raw(child)); + } + const auto arrow_bitmap = garrow_buffer_get_raw(null_bitmap); + auto arrow_struct_array = + std::make_shared(arrow_data_type, + length, + arrow_children, + arrow_bitmap, + n_nulls); + auto arrow_array = + std::static_pointer_cast(arrow_struct_array); + return GARROW_STRUCT_ARRAY(garrow_array_new_raw(&arrow_array)); +} + +/** + * garrow_struct_array_get_field + * @array: A #GArrowStructArray. + * @i: The index of the field in the struct. + * + * Returns: (transfer full): The i-th field. + */ +GArrowArray * +garrow_struct_array_get_field(GArrowStructArray *array, + gint i) +{ + auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); + auto arrow_struct_array = + static_cast(arrow_array.get()); + auto arrow_field = arrow_struct_array->field(i); + return garrow_array_new_raw(&arrow_field); +} + +/** + * garrow_struct_array_get_fields + * @array: A #GArrowStructArray. + * + * Returns: (element-type GArrowArray) (transfer full): + * The fields in the struct. + */ +GList * +garrow_struct_array_get_fields(GArrowStructArray *array) +{ + const auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); + const auto arrow_struct_array = + static_cast(arrow_array.get()); + + GList *fields = NULL; + for (int i = 0; i < arrow_struct_array->num_fields(); ++i) { + auto arrow_field = arrow_struct_array->field(i); + GArrowArray *field = garrow_array_new_raw(&arrow_field); + fields = g_list_prepend(fields, field); + } + + return g_list_reverse(fields); +} + +G_END_DECLS diff --git a/c_glib/arrow-glib/composite-array.h b/c_glib/arrow-glib/composite-array.h new file mode 100644 index 00000000000..ebf95549872 --- /dev/null +++ b/c_glib/arrow-glib/composite-array.h @@ -0,0 +1,132 @@ +/* + * 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 +#include + +G_BEGIN_DECLS + +#define GARROW_TYPE_LIST_ARRAY \ + (garrow_list_array_get_type()) +#define GARROW_LIST_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_LIST_ARRAY, \ + GArrowListArray)) +#define GARROW_LIST_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_LIST_ARRAY, \ + GArrowListArrayClass)) +#define GARROW_IS_LIST_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_LIST_ARRAY)) +#define GARROW_IS_LIST_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_LIST_ARRAY)) +#define GARROW_LIST_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_LIST_ARRAY, \ + GArrowListArrayClass)) + +typedef struct _GArrowListArray GArrowListArray; +typedef struct _GArrowListArrayClass GArrowListArrayClass; + +/** + * GArrowListArray: + * + * It wraps `arrow::ListArray`. + */ +struct _GArrowListArray +{ + /*< private >*/ + GArrowArray parent_instance; +}; + +struct _GArrowListArrayClass +{ + GArrowArrayClass parent_class; +}; + +GType garrow_list_array_get_type(void) G_GNUC_CONST; + +GArrowListArray *garrow_list_array_new(gint64 length, + GArrowBuffer *value_offsets, + GArrowArray *values, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +GArrowDataType *garrow_list_array_get_value_type(GArrowListArray *array); +GArrowArray *garrow_list_array_get_value(GArrowListArray *array, + gint64 i); + + +#define GARROW_TYPE_STRUCT_ARRAY \ + (garrow_struct_array_get_type()) +#define GARROW_STRUCT_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GARROW_TYPE_STRUCT_ARRAY, \ + GArrowStructArray)) +#define GARROW_STRUCT_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GARROW_TYPE_STRUCT_ARRAY, \ + GArrowStructArrayClass)) +#define GARROW_IS_STRUCT_ARRAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GARROW_TYPE_STRUCT_ARRAY)) +#define GARROW_IS_STRUCT_ARRAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GARROW_TYPE_STRUCT_ARRAY)) +#define GARROW_STRUCT_ARRAY_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), \ + GARROW_TYPE_STRUCT_ARRAY, \ + GArrowStructArrayClass)) + +typedef struct _GArrowStructArray GArrowStructArray; +typedef struct _GArrowStructArrayClass GArrowStructArrayClass; + +/** + * GArrowStructArray: + * + * It wraps `arrow::StructArray`. + */ +struct _GArrowStructArray +{ + /*< private >*/ + GArrowArray parent_instance; +}; + +struct _GArrowStructArrayClass +{ + GArrowArrayClass parent_class; +}; + +GType garrow_struct_array_get_type(void) G_GNUC_CONST; + +GArrowStructArray *garrow_struct_array_new(GArrowDataType *data_type, + gint64 length, + GList *children, + GArrowBuffer *null_bitmap, + gint64 n_nulls); + +GArrowArray *garrow_struct_array_get_field(GArrowStructArray *array, + gint i); +GList *garrow_struct_array_get_fields(GArrowStructArray *array); + +G_END_DECLS diff --git a/c_glib/arrow-glib/composite-data-type.cpp b/c_glib/arrow-glib/composite-data-type.cpp index ce3d78ca083..7ce8a978e20 100644 --- a/c_glib/arrow-glib/composite-data-type.cpp +++ b/c_glib/arrow-glib/composite-data-type.cpp @@ -21,6 +21,7 @@ # include #endif +#include #include #include #include @@ -38,6 +39,8 @@ G_BEGIN_DECLS * #GArrowListDataType is a class for list data type. * * #GArrowStructDataType is a class for struct data type. + * + * #GArrowDictionaryDataType is a class for dictionary data type. */ G_DEFINE_TYPE(GArrowListDataType, \ @@ -133,4 +136,87 @@ garrow_struct_data_type_new(GList *fields) return data_type; } + +G_DEFINE_TYPE(GArrowDictionaryDataType, \ + garrow_dictionary_data_type, \ + GARROW_TYPE_FIXED_WIDTH_DATA_TYPE) + +static void +garrow_dictionary_data_type_init(GArrowDictionaryDataType *object) +{ +} + +static void +garrow_dictionary_data_type_class_init(GArrowDictionaryDataTypeClass *klass) +{ +} + +/** + * garrow_dictionary_data_type_new: + * @index_data_type: The data type of index. + * @dictionary: The dictionary. + * @ordered: Whether dictionary contents are ordered or not. + * + * Returns: The newly created dictionary data type. + */ +GArrowDictionaryDataType * +garrow_dictionary_data_type_new(GArrowDataType *index_data_type, + GArrowArray *dictionary, + gboolean ordered) +{ + auto arrow_index_data_type = garrow_data_type_get_raw(index_data_type); + auto arrow_dictionary = garrow_array_get_raw(dictionary); + auto arrow_data_type = arrow::dictionary(arrow_index_data_type, + arrow_dictionary, + ordered); + return GARROW_DICTIONARY_DATA_TYPE(garrow_data_type_new_raw(&arrow_data_type)); +} + +/** + * garrow_dictionary_data_type_get_index_data_type: + * @data_type: The #GArrowDictionaryDataType. + * + * Returns: (transfer full): The #GArrowDataType of index. + */ +GArrowDataType * +garrow_dictionary_data_type_get_index_data_type(GArrowDictionaryDataType *data_type) +{ + auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); + auto arrow_dictionary_data_type = + std::static_pointer_cast(arrow_data_type); + auto arrow_index_data_type = arrow_dictionary_data_type->index_type(); + return garrow_data_type_new_raw(&arrow_index_data_type); +} + +/** + * garrow_dictionary_data_type_get_dictionary: + * @data_type: The #GArrowDictionaryDataType. + * + * Returns: (transfer full): The dictionary as #GArrowArray. + */ +GArrowArray * +garrow_dictionary_data_type_get_dictionary(GArrowDictionaryDataType *data_type) +{ + auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); + auto arrow_dictionary_data_type = + std::static_pointer_cast(arrow_data_type); + auto arrow_dictionary = arrow_dictionary_data_type->dictionary(); + return garrow_array_new_raw(&arrow_dictionary); +} + +/** + * garrow_dictionary_data_type_is_ordered: + * @data_type: The #GArrowDictionaryDataType. + * + * Returns: Whether dictionary contents are ordered or not. + */ +gboolean +garrow_dictionary_data_type_is_ordered(GArrowDictionaryDataType *data_type) +{ + auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type)); + auto arrow_dictionary_data_type = + std::static_pointer_cast(arrow_data_type); + return arrow_dictionary_data_type->ordered(); +} + G_END_DECLS diff --git a/c_glib/arrow-glib/composite-data-type.h b/c_glib/arrow-glib/composite-data-type.h index 9dac5bd84be..11b83014ff8 100644 --- a/c_glib/arrow-glib/composite-data-type.h +++ b/c_glib/arrow-glib/composite-data-type.h @@ -19,6 +19,7 @@ #pragma once +#include #include #include @@ -112,4 +113,28 @@ struct _GArrowStructDataTypeClass GType garrow_struct_data_type_get_type (void) G_GNUC_CONST; GArrowStructDataType *garrow_struct_data_type_new (GList *fields); + +#define GARROW_TYPE_DICTIONARY_DATA_TYPE (garrow_dictionary_data_type_get_type()) +G_DECLARE_DERIVABLE_TYPE(GArrowDictionaryDataType, + garrow_dictionary_data_type, + GARROW, + DICTIONARY_DATA_TYPE, + GArrowFixedWidthDataType) +struct _GArrowDictionaryDataTypeClass +{ + GArrowFixedWidthDataTypeClass parent_class; +}; + +GArrowDictionaryDataType * +garrow_dictionary_data_type_new(GArrowDataType *index_data_type, + GArrowArray *dictionary, + gboolean ordered); +GArrowDataType * +garrow_dictionary_data_type_get_index_data_type(GArrowDictionaryDataType *data_type); +GArrowArray * +garrow_dictionary_data_type_get_dictionary(GArrowDictionaryDataType *data_type); +gboolean +garrow_dictionary_data_type_is_ordered(GArrowDictionaryDataType *data_type); + + G_END_DECLS diff --git a/c_glib/arrow-glib/meson.build b/c_glib/arrow-glib/meson.build index aeec4172d62..25968e69c10 100644 --- a/c_glib/arrow-glib/meson.build +++ b/c_glib/arrow-glib/meson.build @@ -18,12 +18,13 @@ # under the License. sources = files( - 'array.cpp', 'array-builder.cpp', + 'basic-array.cpp', 'basic-data-type.cpp', 'buffer.cpp', 'chunked-array.cpp', 'column.cpp', + 'composite-array.cpp', 'composite-data-type.cpp', 'error.cpp', 'field.cpp', @@ -59,10 +60,12 @@ c_headers = files( 'array.h', 'array-builder.h', 'arrow-glib.h', + 'basic-array.h', 'basic-data-type.h', 'buffer.h', 'chunked-array.h', 'column.h', + 'composite-array.h', 'composite-data-type.h', 'data-type.h', 'error.h', @@ -102,6 +105,7 @@ cpp_headers = files( 'array.hpp', 'array-builder.hpp', 'arrow-glib.hpp', + 'basic-array.hpp', 'basic-data-type.hpp', 'buffer.hpp', 'chunked-array.hpp', diff --git a/c_glib/doc/reference/arrow-glib-docs.xml b/c_glib/doc/reference/arrow-glib-docs.xml index e267ea2f9d3..51e7b2a6a6c 100644 --- a/c_glib/doc/reference/arrow-glib-docs.xml +++ b/c_glib/doc/reference/arrow-glib-docs.xml @@ -40,7 +40,8 @@ Data Array - + + Array builder diff --git a/c_glib/test/test-dictionary-data-type.rb b/c_glib/test/test-dictionary-data-type.rb new file mode 100644 index 00000000000..5530a0415cb --- /dev/null +++ b/c_glib/test/test-dictionary-data-type.rb @@ -0,0 +1,56 @@ +# 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 TestDictionaryDataType < Test::Unit::TestCase + include Helper::Buildable + + def setup + @index_data_type = Arrow::Int32DataType.new + @dictionary = build_string_array(["C", "C++", "Ruby"]) + @ordered = true + @data_type = Arrow::DictionaryDataType.new(@index_data_type, + @dictionary, + @ordered) + end + + def test_type + assert_equal(Arrow::Type::DICTIONARY, @data_type.id) + end + + def test_to_s + assert_equal("dictionary", + @data_type.to_s) + end + + def test_bit_width + assert_equal(32, @data_type.bit_width) + end + + def test_index_data_type + assert_equal(@index_data_type, @data_type.index_data_type) + end + + def test_dictionary + assert_equal(@dictionary, @data_type.dictionary) + end + + def test_ordered? + assert do + @data_type.ordered? + end + end +end