This is an automated email from the ASF dual-hosted git repository.

paleolimbot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-nanoarrow.git


The following commit(s) were added to refs/heads/main by this push:
     new a9d06ea9 feat: Add UniqueSharedBuffer C++ wrapper (#747)
a9d06ea9 is described below

commit a9d06ea920b516669174b81f40baf354c5020a82
Author: Dewey Dunnington <[email protected]>
AuthorDate: Sat May 3 14:26:52 2025 -0500

    feat: Add UniqueSharedBuffer C++ wrapper (#747)
    
    Closes #707
---
 src/nanoarrow/ipc/ipc_hpp_test.cc | 16 ++++++++++++++++
 src/nanoarrow/nanoarrow_ipc.hpp   | 19 +++++++++++++++++++
 2 files changed, 35 insertions(+)

diff --git a/src/nanoarrow/ipc/ipc_hpp_test.cc 
b/src/nanoarrow/ipc/ipc_hpp_test.cc
index cb3b2989..e5867395 100644
--- a/src/nanoarrow/ipc/ipc_hpp_test.cc
+++ b/src/nanoarrow/ipc/ipc_hpp_test.cc
@@ -19,6 +19,22 @@
 
 #include "nanoarrow/nanoarrow_ipc.hpp"
 
+TEST(NanoarrowIpcHppTest, NanoarrowIpcHppTestUniqueSharedBuffer) {
+  nanoarrow::ipc::UniqueSharedBuffer shared_buffer;
+
+  nanoarrow::UniqueBuffer buffer;
+  ASSERT_EQ(ArrowBufferAppend(buffer.get(), "1234", 4), NANOARROW_OK);
+
+  EXPECT_EQ(shared_buffer->private_src.data, nullptr);
+  ASSERT_EQ(ArrowIpcSharedBufferInit(shared_buffer.get(), buffer.get()), 
NANOARROW_OK);
+  EXPECT_NE(shared_buffer->private_src.data, nullptr);
+
+  nanoarrow::ipc::UniqueSharedBuffer shared_buffer2 = std::move(shared_buffer);
+  EXPECT_NE(shared_buffer2->private_src.data, nullptr);
+  EXPECT_EQ(shared_buffer->private_src.data,  // 
NOLINT(clang-analyzer-cplusplus.Move)
+            nullptr);
+}
+
 TEST(NanoarrowIpcHppTest, NanoarrowIpcHppTestUniqueDecoder) {
   nanoarrow::ipc::UniqueDecoder decoder;
 
diff --git a/src/nanoarrow/nanoarrow_ipc.hpp b/src/nanoarrow/nanoarrow_ipc.hpp
index ce2c03dc..a9fadf1f 100644
--- a/src/nanoarrow/nanoarrow_ipc.hpp
+++ b/src/nanoarrow/nanoarrow_ipc.hpp
@@ -25,6 +25,22 @@ namespace nanoarrow {
 
 namespace internal {
 
+template <>
+inline void init_pointer(struct ArrowIpcSharedBuffer* data) {
+  init_pointer(&data->private_src);
+}
+
+template <>
+inline void move_pointer(struct ArrowIpcSharedBuffer* src,
+                         struct ArrowIpcSharedBuffer* dst) {
+  move_pointer(&src->private_src, &dst->private_src);
+}
+
+template <>
+inline void release_pointer(struct ArrowIpcSharedBuffer* data) {
+  ArrowIpcSharedBufferReset(data);
+}
+
 template <>
 inline void init_pointer(struct ArrowIpcDecoder* data) {
   data->private_data = nullptr;
@@ -160,6 +176,9 @@ namespace ipc {
 ///
 /// @{
 
+/// \brief Class wrapping a unique struct ArrowIpcSharedBuffer
+using UniqueSharedBuffer = internal::Unique<struct ArrowIpcSharedBuffer>;
+
 /// \brief Class wrapping a unique struct ArrowIpcDecoder
 using UniqueDecoder = internal::Unique<struct ArrowIpcDecoder>;
 

Reply via email to