Autonomy Software C++ 24.5.1
Welcome to the Autonomy Software repository of the Mars Rover Design Team (MRDT) at Missouri University of Science and Technology (Missouri S&T)! API reference contains the source code and other resources for the development of the autonomy software for our Mars rover. The Autonomy Software project aims to compete in the University Rover Challenge (URC) by demonstrating advanced autonomous capabilities and robust navigation algorithms.
Loading...
Searching...
No Matches
duckdb::ArrowUnionData Struct Reference

Static Public Member Functions

static void Initialize (ArrowAppendData &result, const LogicalType &type, idx_t capacity)
 
static void Append (ArrowAppendData &append_data, Vector &input, idx_t from, idx_t to, idx_t input_size)
 
static void Finalize (ArrowAppendData &append_data, const LogicalType &type, ArrowArray *result)
 

Detailed Description

Member Function Documentation

◆ Initialize()

void duckdb::ArrowUnionData::Initialize ( ArrowAppendData result,
const LogicalType type,
idx_t  capacity 
)
static
33347 {
33348 result.GetMainBuffer().reserve(capacity * sizeof(int8_t));
33349
33350 for (auto &child : UnionType::CopyMemberTypes(type)) {
33351 auto child_buffer = ArrowAppender::InitializeChild(child.second, capacity, result.options);
33352 result.child_data.push_back(std::move(child_buffer));
33353 }
33354}
::int8_t int8_t

◆ Append()

void duckdb::ArrowUnionData::Append ( ArrowAppendData append_data,
Vector input,
idx_t  from,
idx_t  to,
idx_t  input_size 
)
static
33356 {
33357 UnifiedVectorFormat format;
33358 input.ToUnifiedFormat(input_size, format);
33359 idx_t size = to - from;
33360
33361 auto &types_buffer = append_data.GetMainBuffer();
33362
33363 duckdb::vector<Vector> child_vectors;
33364 for (const auto &child : UnionType::CopyMemberTypes(input.GetType())) {
33365 child_vectors.emplace_back(child.second, size);
33366 }
33367
33368 for (idx_t i = 0; i < size; i++) {
33369 auto input_idx = from + i;
33370 const auto &val = input.GetValue(input_idx);
33371
33372 idx_t tag = 0;
33373 Value resolved_value(nullptr);
33374 if (!val.IsNull()) {
33375 tag = UnionValue::GetTag(val);
33376
33377 resolved_value = UnionValue::GetValue(val);
33378 }
33379
33380 for (idx_t child_idx = 0; child_idx < child_vectors.size(); child_idx++) {
33381 child_vectors[child_idx].SetValue(i, child_idx == tag ? resolved_value : Value(nullptr));
33382 }
33383 types_buffer.push_back<data_t>(NumericCast<data_t>(tag));
33384 }
33385
33386 for (idx_t child_idx = 0; child_idx < child_vectors.size(); child_idx++) {
33387 auto &child_buffer = append_data.child_data[child_idx];
33388 auto &child = child_vectors[child_idx];
33389 child_buffer->append_vector(*child_buffer, child, 0, size, size);
33390 }
33391 append_data.row_count += size;
33392}
Definition duckdb.hpp:960
GOpaque< Size > size(const GMat &src)
uint8_t data_t
data pointers
Definition duckdb.hpp:246

◆ Finalize()

void duckdb::ArrowUnionData::Finalize ( ArrowAppendData append_data,
const LogicalType type,
ArrowArray result 
)
static
33394 {
33395 result->n_buffers = 1;
33396 result->buffers[0] = append_data.GetMainBuffer().data();
33397
33398 auto &child_types = UnionType::CopyMemberTypes(type);
33399 ArrowAppender::AddChildren(append_data, child_types.size());
33400 result->children = append_data.child_pointers.data();
33401 result->n_children = NumericCast<int64_t>(child_types.size());
33402 for (idx_t i = 0; i < child_types.size(); i++) {
33403 auto &child_type = child_types[i].second;
33404 append_data.child_arrays[i] = *ArrowAppender::FinalizeChild(child_type, std::move(append_data.child_data[i]));
33405 }
33406}

The documentation for this struct was generated from the following file: