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>;