sparrow-ipc 0.2.0
Loading...
Searching...
No Matches
arrow_schema.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <optional>
4#include <unordered_set>
5
6#include <sparrow/c_interface.hpp>
7#include <sparrow/utils/contracts.hpp>
8#include <sparrow/utils/metadata.hpp>
9
12
13namespace sparrow_ipc
14{
16
17 template <sparrow::input_metadata_container M = std::vector<sparrow::metadata_pair>>
19 ArrowSchema& schema,
20 std::string_view format,
21 const char* name,
22 std::optional<M> metadata,
23 std::optional<std::unordered_set<sparrow::ArrowFlag>> flags,
24 size_t children_count,
25 ArrowSchema** children,
26 ArrowSchema* dictionary
27 )
28 {
29 schema.flags = 0;
30 if (flags.has_value())
31 {
32 for (const auto& flag : *flags)
33 {
34 schema.flags |= static_cast<int64_t>(flag);
35 }
36 }
37 schema.n_children = static_cast<int64_t>(children_count);
38
39 std::optional<std::string> metadata_str = metadata.has_value()
40 ? std::make_optional(
41 sparrow::get_metadata_from_key_values(*metadata)
42 )
43 : std::nullopt;
44
45 schema.private_data = new non_owning_arrow_schema_private_data(format, name, std::move(metadata_str));
46
47 const auto private_data = static_cast<non_owning_arrow_schema_private_data*>(schema.private_data);
48 schema.format = private_data->format_ptr();
49 schema.name = private_data->name_ptr();
50 schema.metadata = private_data->metadata_ptr();
51 schema.children = children;
52 schema.dictionary = dictionary;
53 schema.release = release_non_owning_arrow_schema;
54 }
55
56 template <sparrow::input_metadata_container M = std::vector<sparrow::metadata_pair>>
57 [[nodiscard]] ArrowSchema make_non_owning_arrow_schema(
58 std::string_view format,
59 const char* name,
60 std::optional<M> metadata,
61 std::optional<std::unordered_set<sparrow::ArrowFlag>> flags,
62 size_t children_count,
63 ArrowSchema** children,
64 ArrowSchema* dictionary
65 )
66 {
67 ArrowSchema schema{};
68 fill_non_owning_arrow_schema(schema, format, name, metadata, flags, children_count, children, dictionary);
69 return schema;
70 }
71}
SPARROW_IPC_API const char * format_ptr() const noexcept
#define SPARROW_IPC_API
Definition config.hpp:12
ArrowSchema make_non_owning_arrow_schema(std::string_view format, const char *name, std::optional< M > metadata, std::optional< std::unordered_set< sparrow::ArrowFlag > > flags, size_t children_count, ArrowSchema **children, ArrowSchema *dictionary)
void fill_non_owning_arrow_schema(ArrowSchema &schema, std::string_view format, const char *name, std::optional< M > metadata, std::optional< std::unordered_set< sparrow::ArrowFlag > > flags, size_t children_count, ArrowSchema **children, ArrowSchema *dictionary)
SPARROW_IPC_API void release_non_owning_arrow_schema(ArrowSchema *schema)