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::TernaryExecutor Struct Reference

Static Public Member Functions

template<class A_TYPE , class B_TYPE , class C_TYPE , class RESULT_TYPE , class OPWRAPPER , class FUN >
static void ExecuteGeneric (Vector &a, Vector &b, Vector &c, Vector &result, idx_t count, FUN fun)
 
template<class A_TYPE , class B_TYPE , class C_TYPE , class RESULT_TYPE , class FUN = std::function<RESULT_TYPE(A_TYPE, B_TYPE, C_TYPE)>>
static void Execute (Vector &a, Vector &b, Vector &c, Vector &result, idx_t count, FUN fun)
 
template<class A_TYPE , class B_TYPE , class C_TYPE , class RESULT_TYPE , class OP >
static void ExecuteStandard (Vector &a, Vector &b, Vector &c, Vector &result, idx_t count)
 
template<class A_TYPE , class B_TYPE , class C_TYPE , class RESULT_TYPE , class FUN = std::function<RESULT_TYPE(A_TYPE, B_TYPE, C_TYPE, ValidityMask &, idx_t)>>
static void ExecuteWithNulls (Vector &a, Vector &b, Vector &c, Vector &result, idx_t count, FUN fun)
 
template<class A_TYPE , class B_TYPE , class C_TYPE , class OP >
static idx_t Select (Vector &a, Vector &b, Vector &c, const SelectionVector *sel, idx_t count, SelectionVector *true_sel, SelectionVector *false_sel)
 

Static Private Member Functions

template<class A_TYPE , class B_TYPE , class C_TYPE , class RESULT_TYPE , class OPWRAPPER , class FUN >
static void ExecuteLoop (const A_TYPE *__restrict adata, const B_TYPE *__restrict bdata, const C_TYPE *__restrict cdata, RESULT_TYPE *__restrict result_data, idx_t count, const SelectionVector &asel, const SelectionVector &bsel, const SelectionVector &csel, ValidityMask &avalidity, ValidityMask &bvalidity, ValidityMask &cvalidity, ValidityMask &result_validity, FUN fun)
 
template<class A_TYPE , class B_TYPE , class C_TYPE , class OP , bool NO_NULL, bool HAS_TRUE_SEL, bool HAS_FALSE_SEL>
static idx_t SelectLoop (const A_TYPE *__restrict adata, const B_TYPE *__restrict bdata, const C_TYPE *__restrict cdata, const SelectionVector *result_sel, idx_t count, const SelectionVector &asel, const SelectionVector &bsel, const SelectionVector &csel, ValidityMask &avalidity, ValidityMask &bvalidity, ValidityMask &cvalidity, SelectionVector *true_sel, SelectionVector *false_sel)
 
template<class A_TYPE , class B_TYPE , class C_TYPE , class OP , bool NO_NULL>
static idx_t SelectLoopSelSwitch (UnifiedVectorFormat &adata, UnifiedVectorFormat &bdata, UnifiedVectorFormat &cdata, const SelectionVector *sel, idx_t count, SelectionVector *true_sel, SelectionVector *false_sel)
 
template<class A_TYPE , class B_TYPE , class C_TYPE , class OP >
static idx_t SelectLoopSwitch (UnifiedVectorFormat &adata, UnifiedVectorFormat &bdata, UnifiedVectorFormat &cdata, const SelectionVector *sel, idx_t count, SelectionVector *true_sel, SelectionVector *false_sel)
 

Member Function Documentation

◆ ExecuteLoop()

static void duckdb::TernaryExecutor::ExecuteLoop ( const A_TYPE *__restrict  adata,
const B_TYPE *__restrict  bdata,
const C_TYPE *__restrict  cdata,
RESULT_TYPE *__restrict  result_data,
idx_t  count,
const SelectionVector asel,
const SelectionVector bsel,
const SelectionVector csel,
ValidityMask avalidity,
ValidityMask bvalidity,
ValidityMask cvalidity,
ValidityMask result_validity,
FUN  fun 
)
inlinestaticprivate
12350 {
12351 if (!avalidity.AllValid() || !bvalidity.AllValid() || !cvalidity.AllValid()) {
12352 for (idx_t i = 0; i < count; i++) {
12353 auto aidx = asel.get_index(i);
12354 auto bidx = bsel.get_index(i);
12355 auto cidx = csel.get_index(i);
12356 if (avalidity.RowIsValid(aidx) && bvalidity.RowIsValid(bidx) && cvalidity.RowIsValid(cidx)) {
12357 result_data[i] = OPWRAPPER::template Operation<FUN, A_TYPE, B_TYPE, C_TYPE, RESULT_TYPE>(
12358 fun, adata[aidx], bdata[bidx], cdata[cidx], result_validity, i);
12359 } else {
12360 result_validity.SetInvalid(i);
12361 }
12362 }
12363 } else {
12364 for (idx_t i = 0; i < count; i++) {
12365 auto aidx = asel.get_index(i);
12366 auto bidx = bsel.get_index(i);
12367 auto cidx = csel.get_index(i);
12368 result_data[i] = OPWRAPPER::template Operation<FUN, A_TYPE, B_TYPE, C_TYPE, RESULT_TYPE>(
12369 fun, adata[aidx], bdata[bidx], cdata[cidx], result_validity, i);
12370 }
12371 }
12372 }

◆ ExecuteGeneric()

static void duckdb::TernaryExecutor::ExecuteGeneric ( Vector a,
Vector b,
Vector c,
Vector result,
idx_t  count,
FUN  fun 
)
inlinestatic
12376 {
12377 if (a.GetVectorType() == VectorType::CONSTANT_VECTOR && b.GetVectorType() == VectorType::CONSTANT_VECTOR &&
12378 c.GetVectorType() == VectorType::CONSTANT_VECTOR) {
12379 result.SetVectorType(VectorType::CONSTANT_VECTOR);
12380 if (ConstantVector::IsNull(a) || ConstantVector::IsNull(b) || ConstantVector::IsNull(c)) {
12381 ConstantVector::SetNull(result, true);
12382 } else {
12383 auto adata = ConstantVector::GetData<A_TYPE>(a);
12384 auto bdata = ConstantVector::GetData<B_TYPE>(b);
12385 auto cdata = ConstantVector::GetData<C_TYPE>(c);
12386 auto result_data = ConstantVector::GetData<RESULT_TYPE>(result);
12387 auto &result_validity = ConstantVector::Validity(result);
12388 result_data[0] = OPWRAPPER::template Operation<FUN, A_TYPE, B_TYPE, C_TYPE, RESULT_TYPE>(
12389 fun, adata[0], bdata[0], cdata[0], result_validity, 0);
12390 }
12391 } else {
12392 result.SetVectorType(VectorType::FLAT_VECTOR);
12393
12394 UnifiedVectorFormat adata, bdata, cdata;
12395 a.ToUnifiedFormat(count, adata);
12396 b.ToUnifiedFormat(count, bdata);
12397 c.ToUnifiedFormat(count, cdata);
12398
12399 ExecuteLoop<A_TYPE, B_TYPE, C_TYPE, RESULT_TYPE, OPWRAPPER>(
12400 UnifiedVectorFormat::GetData<A_TYPE>(adata), UnifiedVectorFormat::GetData<B_TYPE>(bdata),
12401 UnifiedVectorFormat::GetData<C_TYPE>(cdata), FlatVector::GetData<RESULT_TYPE>(result), count,
12402 *adata.sel, *bdata.sel, *cdata.sel, adata.validity, bdata.validity, cdata.validity,
12403 FlatVector::Validity(result), fun);
12404 }
12405 }

◆ Execute()

template<class A_TYPE , class B_TYPE , class C_TYPE , class RESULT_TYPE , class FUN = std::function<RESULT_TYPE(A_TYPE, B_TYPE, C_TYPE)>>
static void duckdb::TernaryExecutor::Execute ( Vector a,
Vector b,
Vector c,
Vector result,
idx_t  count,
FUN  fun 
)
inlinestatic
12409 {
12410 ExecuteGeneric<A_TYPE, B_TYPE, C_TYPE, RESULT_TYPE, TernaryLambdaWrapper, FUN>(a, b, c, result, count, fun);
12411 }

◆ ExecuteStandard()

static void duckdb::TernaryExecutor::ExecuteStandard ( Vector a,
Vector b,
Vector c,
Vector result,
idx_t  count 
)
inlinestatic
12414 {
12415 ExecuteGeneric<A_TYPE, B_TYPE, C_TYPE, RESULT_TYPE, TernaryStandardOperatorWrapper<OP>, bool>(a, b, c, result,
12416 count, false);
12417 }

◆ ExecuteWithNulls()

template<class A_TYPE , class B_TYPE , class C_TYPE , class RESULT_TYPE , class FUN = std::function<RESULT_TYPE(A_TYPE, B_TYPE, C_TYPE, ValidityMask &, idx_t)>>
static void duckdb::TernaryExecutor::ExecuteWithNulls ( Vector a,
Vector b,
Vector c,
Vector result,
idx_t  count,
FUN  fun 
)
inlinestatic
12421 {
12422 ExecuteGeneric<A_TYPE, B_TYPE, C_TYPE, RESULT_TYPE, TernaryLambdaWrapperWithNulls, FUN>(a, b, c, result, count,
12423 fun);
12424 }

◆ SelectLoop()

template<class A_TYPE , class B_TYPE , class C_TYPE , class OP , bool NO_NULL, bool HAS_TRUE_SEL, bool HAS_FALSE_SEL>
static idx_t duckdb::TernaryExecutor::SelectLoop ( const A_TYPE *__restrict  adata,
const B_TYPE *__restrict  bdata,
const C_TYPE *__restrict  cdata,
const SelectionVector result_sel,
idx_t  count,
const SelectionVector asel,
const SelectionVector bsel,
const SelectionVector csel,
ValidityMask avalidity,
ValidityMask bvalidity,
ValidityMask cvalidity,
SelectionVector true_sel,
SelectionVector false_sel 
)
inlinestaticprivate
12432 {
12433 idx_t true_count = 0, false_count = 0;
12434 for (idx_t i = 0; i < count; i++) {
12435 auto result_idx = result_sel->get_index(i);
12436 auto aidx = asel.get_index(i);
12437 auto bidx = bsel.get_index(i);
12438 auto cidx = csel.get_index(i);
12439 bool comparison_result =
12440 (NO_NULL || (avalidity.RowIsValid(aidx) && bvalidity.RowIsValid(bidx) && cvalidity.RowIsValid(cidx))) &&
12441 OP::Operation(adata[aidx], bdata[bidx], cdata[cidx]);
12442 if (HAS_TRUE_SEL) {
12443 true_sel->set_index(true_count, result_idx);
12444 true_count += comparison_result;
12445 }
12446 if (HAS_FALSE_SEL) {
12447 false_sel->set_index(false_count, result_idx);
12448 false_count += !comparison_result;
12449 }
12450 }
12451 if (HAS_TRUE_SEL) {
12452 return true_count;
12453 } else {
12454 return count - false_count;
12455 }
12456 }

◆ SelectLoopSelSwitch()

template<class A_TYPE , class B_TYPE , class C_TYPE , class OP , bool NO_NULL>
static idx_t duckdb::TernaryExecutor::SelectLoopSelSwitch ( UnifiedVectorFormat adata,
UnifiedVectorFormat bdata,
UnifiedVectorFormat cdata,
const SelectionVector sel,
idx_t  count,
SelectionVector true_sel,
SelectionVector false_sel 
)
inlinestaticprivate
12461 {
12462 if (true_sel && false_sel) {
12463 return SelectLoop<A_TYPE, B_TYPE, C_TYPE, OP, NO_NULL, true, true>(
12464 UnifiedVectorFormat::GetData<A_TYPE>(adata), UnifiedVectorFormat::GetData<B_TYPE>(bdata),
12465 UnifiedVectorFormat::GetData<C_TYPE>(cdata), sel, count, *adata.sel, *bdata.sel, *cdata.sel,
12466 adata.validity, bdata.validity, cdata.validity, true_sel, false_sel);
12467 } else if (true_sel) {
12468 return SelectLoop<A_TYPE, B_TYPE, C_TYPE, OP, NO_NULL, true, false>(
12469 UnifiedVectorFormat::GetData<A_TYPE>(adata), UnifiedVectorFormat::GetData<B_TYPE>(bdata),
12470 UnifiedVectorFormat::GetData<C_TYPE>(cdata), sel, count, *adata.sel, *bdata.sel, *cdata.sel,
12471 adata.validity, bdata.validity, cdata.validity, true_sel, false_sel);
12472 } else {
12473 D_ASSERT(false_sel);
12474 return SelectLoop<A_TYPE, B_TYPE, C_TYPE, OP, NO_NULL, false, true>(
12475 UnifiedVectorFormat::GetData<A_TYPE>(adata), UnifiedVectorFormat::GetData<B_TYPE>(bdata),
12476 UnifiedVectorFormat::GetData<C_TYPE>(cdata), sel, count, *adata.sel, *bdata.sel, *cdata.sel,
12477 adata.validity, bdata.validity, cdata.validity, true_sel, false_sel);
12478 }
12479 }

◆ SelectLoopSwitch()

static idx_t duckdb::TernaryExecutor::SelectLoopSwitch ( UnifiedVectorFormat adata,
UnifiedVectorFormat bdata,
UnifiedVectorFormat cdata,
const SelectionVector sel,
idx_t  count,
SelectionVector true_sel,
SelectionVector false_sel 
)
inlinestaticprivate
12484 {
12485 if (!adata.validity.AllValid() || !bdata.validity.AllValid() || !cdata.validity.AllValid()) {
12486 return SelectLoopSelSwitch<A_TYPE, B_TYPE, C_TYPE, OP, false>(adata, bdata, cdata, sel, count, true_sel,
12487 false_sel);
12488 } else {
12489 return SelectLoopSelSwitch<A_TYPE, B_TYPE, C_TYPE, OP, true>(adata, bdata, cdata, sel, count, true_sel,
12490 false_sel);
12491 }
12492 }

◆ Select()

static idx_t duckdb::TernaryExecutor::Select ( Vector a,
Vector b,
Vector c,
const SelectionVector sel,
idx_t  count,
SelectionVector true_sel,
SelectionVector false_sel 
)
inlinestatic
12497 {
12498 if (!sel) {
12499 sel = FlatVector::IncrementalSelectionVector();
12500 }
12501 UnifiedVectorFormat adata, bdata, cdata;
12502 a.ToUnifiedFormat(count, adata);
12503 b.ToUnifiedFormat(count, bdata);
12504 c.ToUnifiedFormat(count, cdata);
12505
12506 return SelectLoopSwitch<A_TYPE, B_TYPE, C_TYPE, OP>(adata, bdata, cdata, sel, count, true_sel, false_sel);
12507 }

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