From 3f9b26c0edc84fb0d5c121937f966553bb12c0bf Mon Sep 17 00:00:00 2001 From: Kouhei Sutou Date: Thu, 20 Apr 2017 10:06:15 -0400 Subject: [PATCH] ARROW-863: [GLib] Use GBytes to implement zero-copy Author: Kouhei Sutou Closes #572 from kou/glib-buffer-use-gbytes and squashes the following commits: dc37de3 [Kouhei Sutou] [GLib] Use GBytes to implement zero-copy --- c_glib/arrow-glib/buffer.cpp | 13 +++++++------ c_glib/arrow-glib/buffer.h | 3 +-- c_glib/test/test-buffer.rb | 6 +++--- c_glib/test/test-tensor.rb | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/c_glib/arrow-glib/buffer.cpp b/c_glib/arrow-glib/buffer.cpp index 0ec52df0aee67..9853e896b3dcc 100644 --- a/c_glib/arrow-glib/buffer.cpp +++ b/c_glib/arrow-glib/buffer.cpp @@ -167,18 +167,19 @@ garrow_buffer_get_capacity(GArrowBuffer *buffer) /** * garrow_buffer_get_data: * @buffer: A #GArrowBuffer. - * @size: (out): The number of bytes of the data. * - * Returns: (array length=size): The data of the buffer. + * Returns: (transfer full): The data of the buffer. The data is owned by + * the buffer. You should not free or modify the data. * * Since: 0.3.0 */ -const guint8 * -garrow_buffer_get_data(GArrowBuffer *buffer, gint64 *size) +GBytes * +garrow_buffer_get_data(GArrowBuffer *buffer) { auto arrow_buffer = garrow_buffer_get_raw(buffer); - *size = arrow_buffer->size(); - return arrow_buffer->data(); + auto data = g_bytes_new_static(arrow_buffer->data(), + arrow_buffer->size()); + return data; } /** diff --git a/c_glib/arrow-glib/buffer.h b/c_glib/arrow-glib/buffer.h index 1e7d55182fd1d..83e1d0d66bf28 100644 --- a/c_glib/arrow-glib/buffer.h +++ b/c_glib/arrow-glib/buffer.h @@ -61,8 +61,7 @@ GArrowBuffer *garrow_buffer_new (const guint8 *data, gint64 size); gboolean garrow_buffer_is_mutable (GArrowBuffer *buffer); gint64 garrow_buffer_get_capacity (GArrowBuffer *buffer); -const guint8 *garrow_buffer_get_data (GArrowBuffer *buffer, - gint64 *size); +GBytes *garrow_buffer_get_data (GArrowBuffer *buffer); gint64 garrow_buffer_get_size (GArrowBuffer *buffer); GArrowBuffer *garrow_buffer_get_parent (GArrowBuffer *buffer); diff --git a/c_glib/test/test-buffer.rb b/c_glib/test/test-buffer.rb index 1ea26f24ce873..6bb96714c8283 100644 --- a/c_glib/test/test-buffer.rb +++ b/c_glib/test/test-buffer.rb @@ -32,7 +32,7 @@ def test_capacity end def test_data - assert_equal(@data, @buffer.data.pack("C*")) + assert_equal(@data, @buffer.data.to_s) end def test_size @@ -45,11 +45,11 @@ def test_parent def test_copy copied_buffer = @buffer.copy(1, 3) - assert_equal(@data[1, 3], copied_buffer.data.pack("C*")) + assert_equal(@data[1, 3], copied_buffer.data.to_s) end def test_slice sliced_buffer = @buffer.slice(1, 3) - assert_equal(@data[1, 3], sliced_buffer.data.pack("C*")) + assert_equal(@data[1, 3], sliced_buffer.data.to_s) end end diff --git a/c_glib/test/test-tensor.rb b/c_glib/test/test-tensor.rb index 3e1f541cfd4b5..225857b52da98 100644 --- a/c_glib/test/test-tensor.rb +++ b/c_glib/test/test-tensor.rb @@ -49,7 +49,7 @@ def test_value_type end def test_buffer - assert_equal(@raw_data, @tensor.buffer.data) + assert_equal(@raw_data, @tensor.buffer.data.to_s.unpack("c*")) end def test_shape