sparrow-ipc 0.2.0
Loading...
Searching...
No Matches
arrow_array.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <utility>
4
5#include <sparrow/c_interface.hpp>
6#include <sparrow/utils/contracts.hpp>
7
10
11namespace sparrow_ipc
12{
14
15 template <ArrowPrivateData T>
16 void arrow_array_release(ArrowArray* array)
17 {
18 SPARROW_ASSERT_TRUE(array != nullptr)
19 SPARROW_ASSERT_TRUE(array->release == std::addressof(arrow_array_release<T>))
20
21 SPARROW_ASSERT_TRUE(array->private_data != nullptr);
22
23 delete static_cast<T*>(array->private_data);
24 array->private_data = nullptr;
25 array->buffers = nullptr; // The buffers were deleted with the private data
26
28 array->release = nullptr;
29 }
30
31 template <ArrowPrivateData T, typename Arg>
33 ArrowArray& array,
34 int64_t length,
35 int64_t null_count,
36 int64_t offset,
37 size_t children_count,
38 ArrowArray** children,
39 ArrowArray* dictionary,
40 Arg&& private_data_arg
41 )
42 {
43 SPARROW_ASSERT_TRUE(length >= 0);
44 SPARROW_ASSERT_TRUE(null_count >= -1);
45 SPARROW_ASSERT_TRUE(offset >= 0);
46
47 array.length = length;
48 array.null_count = null_count;
49 array.offset = offset;
50 array.n_children = static_cast<int64_t>(children_count);
51 array.children = children;
52 array.dictionary = dictionary;
53
54 auto private_data = new T(std::forward<Arg>(private_data_arg));
55 array.private_data = private_data;
56 array.n_buffers = private_data->n_buffers();
57 array.buffers = private_data->buffers_ptrs();
58
59 array.release = &arrow_array_release<T>;
60 }
61
62 template <ArrowPrivateData T, typename Arg>
63 [[nodiscard]] ArrowArray make_arrow_array(
64 int64_t length,
65 int64_t null_count,
66 int64_t offset,
67 size_t children_count,
68 ArrowArray** children,
69 ArrowArray* dictionary,
70 Arg&& private_data_arg
71 )
72 {
73 ArrowArray array{};
75 array,
76 length,
77 null_count,
78 offset,
79 children_count,
80 children,
81 dictionary,
82 std::forward<Arg>(private_data_arg)
83 );
84 return array;
85 }
86}
#define SPARROW_IPC_API
Definition config.hpp:12
void arrow_array_release(ArrowArray *array)
SPARROW_IPC_API void release_arrow_array_children_and_dictionary(ArrowArray *array)
void fill_arrow_array(ArrowArray &array, int64_t length, int64_t null_count, int64_t offset, size_t children_count, ArrowArray **children, ArrowArray *dictionary, Arg &&private_data_arg)
ArrowArray make_arrow_array(int64_t length, int64_t null_count, int64_t offset, size_t children_count, ArrowArray **children, ArrowArray *dictionary, Arg &&private_data_arg)