Repository: arrow Updated Branches: refs/heads/master 85892a288 -> 248a9d830
ARROW-1212: [GLib] Add garrow_binary_array_get_offsets_buffer() Author: Kouhei Sutou <k...@clear-code.com> Closes #836 from kou/glib-add-binary-get-offsets-buffer and squashes the following commits: 3b15321 [Kouhei Sutou] Add garrow_binary_array_get_offsets_buffer() Project: http://git-wip-us.apache.org/repos/asf/arrow/repo Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/248a9d83 Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/248a9d83 Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/248a9d83 Branch: refs/heads/master Commit: 248a9d8303101c76be7bceb1254855121a188b33 Parents: 85892a2 Author: Kouhei Sutou <k...@clear-code.com> Authored: Thu Jul 13 10:41:12 2017 -0400 Committer: Wes McKinney <wes.mckin...@twosigma.com> Committed: Thu Jul 13 10:41:12 2017 -0400 ---------------------------------------------------------------------- c_glib/arrow-glib/array.cpp | 16 ++++++++++++++++ c_glib/arrow-glib/array.h | 1 + c_glib/test/test-binary-array.rb | 12 ++++++++++++ 3 files changed, 29 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/arrow/blob/248a9d83/c_glib/arrow-glib/array.cpp ---------------------------------------------------------------------- diff --git a/c_glib/arrow-glib/array.cpp b/c_glib/arrow-glib/array.cpp index ab62bba..30e51fb 100644 --- a/c_glib/arrow-glib/array.cpp +++ b/c_glib/arrow-glib/array.cpp @@ -1429,6 +1429,22 @@ garrow_binary_array_get_buffer(GArrowBinaryArray *array) return garrow_buffer_new_raw(&arrow_data); } +/** + * garrow_binary_array_get_offsets_buffer: + * @array: A #GArrowBinaryArray. + * + * Returns: (transfer full): The offsets of the array as #GArrowBuffer. + */ +GArrowBuffer * +garrow_binary_array_get_offsets_buffer(GArrowBinaryArray *array) +{ + auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array)); + auto arrow_binary_array = + static_cast<arrow::BinaryArray *>(arrow_array.get()); + auto arrow_offsets = arrow_binary_array->value_offsets(); + return garrow_buffer_new_raw(&arrow_offsets); +} + G_DEFINE_TYPE(GArrowStringArray, \ garrow_string_array, \ http://git-wip-us.apache.org/repos/asf/arrow/blob/248a9d83/c_glib/arrow-glib/array.h ---------------------------------------------------------------------- diff --git a/c_glib/arrow-glib/array.h b/c_glib/arrow-glib/array.h index 6043e90..1b2ba9f 100644 --- a/c_glib/arrow-glib/array.h +++ b/c_glib/arrow-glib/array.h @@ -804,6 +804,7 @@ GArrowBinaryArray *garrow_binary_array_new(gint64 length, 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()) http://git-wip-us.apache.org/repos/asf/arrow/blob/248a9d83/c_glib/test/test-binary-array.rb ---------------------------------------------------------------------- diff --git a/c_glib/test/test-binary-array.rb b/c_glib/test/test-binary-array.rb index 9ae122a..2dfd9cf 100644 --- a/c_glib/test/test-binary-array.rb +++ b/c_glib/test/test-binary-array.rb @@ -46,4 +46,16 @@ class TestBinaryArray < Test::Unit::TestCase array = builder.finish assert_equal(data1 + data2, array.buffer.data.to_s) end + + def test_offsets_buffer + data1 = "\x00\x01" + data2 = "\x02\x03\x04" + builder = Arrow::BinaryArrayBuilder.new + builder.append(data1) + builder.append(data2) + array = builder.finish + byte_per_offset = 4 + assert_equal([0, 2, 5].pack("l*"), + array.offsets_buffer.data.to_s[0, byte_per_offset * 3]) + end end