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::ArrowListViewData< BUFTYPE > Struct Template 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)
 
static void AppendListMetadata (ArrowAppendData &append_data, UnifiedVectorFormat &format, idx_t from, idx_t to, vector< sel_t > &child_sel)
 

Member Function Documentation

◆ Initialize()

template<class BUFTYPE = int64_t>
static void duckdb::ArrowListViewData< BUFTYPE >::Initialize ( ArrowAppendData result,
const LogicalType type,
idx_t  capacity 
)
inlinestatic
33634 {
33635 auto &child_type = ListType::GetChildType(type);
33636 result.GetMainBuffer().reserve(capacity * sizeof(BUFTYPE));
33637 result.GetAuxBuffer().reserve(capacity * sizeof(BUFTYPE));
33638
33639 auto child_buffer = ArrowAppender::InitializeChild(child_type, capacity, result.options);
33640 result.child_data.push_back(std::move(child_buffer));
33641 }

◆ Append()

template<class BUFTYPE = int64_t>
static void duckdb::ArrowListViewData< BUFTYPE >::Append ( ArrowAppendData append_data,
Vector input,
idx_t  from,
idx_t  to,
idx_t  input_size 
)
inlinestatic
33643 {
33644 UnifiedVectorFormat format;
33645 input.ToUnifiedFormat(input_size, format);
33646 idx_t size = to - from;
33647 vector<sel_t> child_indices;
33648 append_data.AppendValidity(format, from, to);
33649 AppendListMetadata(append_data, format, from, to, child_indices);
33650
33651 // append the child vector of the list
33652 SelectionVector child_sel(child_indices.data());
33653 auto &child = ListVector::GetEntry(input);
33654 auto child_size = child_indices.size();
33655 Vector child_copy(child.GetType());
33656 child_copy.Slice(child, child_sel, child_size);
33657 append_data.child_data[0]->append_vector(*append_data.child_data[0], child_copy, 0, child_size, child_size);
33658 append_data.row_count += size;
33659 }
GOpaque< Size > size(const GMat &src)
static DUCKDB_API const Vector & GetEntry(const Vector &vector)
Gets a reference to the underlying child-vector of a list.

◆ Finalize()

template<class BUFTYPE = int64_t>
static void duckdb::ArrowListViewData< BUFTYPE >::Finalize ( ArrowAppendData append_data,
const LogicalType type,
ArrowArray result 
)
inlinestatic
33661 {
33662 result->n_buffers = 3;
33663 result->buffers[1] = append_data.GetMainBuffer().data();
33664 result->buffers[2] = append_data.GetAuxBuffer().data();
33665
33666 auto &child_type = ListType::GetChildType(type);
33667 ArrowAppender::AddChildren(append_data, 1);
33668 result->children = append_data.child_pointers.data();
33669 result->n_children = 1;
33670 append_data.child_arrays[0] = *ArrowAppender::FinalizeChild(child_type, std::move(append_data.child_data[0]));
33671 }

◆ AppendListMetadata()

template<class BUFTYPE = int64_t>
static void duckdb::ArrowListViewData< BUFTYPE >::AppendListMetadata ( ArrowAppendData append_data,
UnifiedVectorFormat format,
idx_t  from,
idx_t  to,
vector< sel_t > &  child_sel 
)
inlinestatic
33675 {
33676 // resize the offset buffer - the offset buffer holds the offsets into the child array
33677 idx_t size = to - from;
33678 append_data.GetMainBuffer().resize(append_data.GetMainBuffer().size() + sizeof(BUFTYPE) * size);
33679 append_data.GetAuxBuffer().resize(append_data.GetAuxBuffer().size() + sizeof(BUFTYPE) * size);
33680 auto data = UnifiedVectorFormat::GetData<list_entry_t>(format);
33681 auto offset_data = append_data.GetMainBuffer().GetData<BUFTYPE>();
33682 auto size_data = append_data.GetAuxBuffer().GetData<BUFTYPE>();
33683
33684 BUFTYPE last_offset =
33685 append_data.row_count ? offset_data[append_data.row_count - 1] + size_data[append_data.row_count - 1] : 0;
33686 for (idx_t i = 0; i < size; i++) {
33687 auto source_idx = format.sel->get_index(i + from);
33688 auto offset_idx = append_data.row_count + i;
33689
33690 if (!format.validity.RowIsValid(source_idx)) {
33691 offset_data[offset_idx] = last_offset;
33692 size_data[offset_idx] = 0;
33693 continue;
33694 }
33695
33696 // append the offset data
33697 auto list_length = data[source_idx].length;
33698 if (std::is_same<BUFTYPE, int32_t>::value == true &&
33699 (uint64_t)last_offset + list_length > NumericLimits<int32_t>::Maximum()) {
33700 throw InvalidInputException(
33701 "Arrow Appender: The maximum combined list offset for regular list buffers is "
33702 "%u but the offset of %lu exceeds this.\n* SET arrow_large_buffer_size=true to use large list "
33703 "buffers",
33704 NumericLimits<int32_t>::Maximum(), last_offset);
33705 }
33706 offset_data[offset_idx] = last_offset;
33707 size_data[offset_idx] = UnsafeNumericCast<BUFTYPE>(list_length);
33708 last_offset += list_length;
33709
33710 for (idx_t k = 0; k < list_length; k++) {
33711 child_sel.push_back(UnsafeNumericCast<sel_t>(data[source_idx].offset + k));
33712 }
33713 }
33714 }
::uint64_t uint64_t

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