MCPcopy Create free account
hub / github.com/apache/arrow / RepeatedArrayFactory

Class RepeatedArrayFactory

cpp/src/arrow/array/util.cc:598–896  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

596};
597
598class RepeatedArrayFactory {
599 public:
600 RepeatedArrayFactory(MemoryPool* pool, const Scalar& scalar, int64_t length)
601 : pool_(pool), scalar_(scalar), length_(length) {}
602
603 template <typename T>
604 const auto& scalar() const {
605 return checked_cast<const typename TypeTraits<T>::ScalarType&>(scalar_);
606 }
607
608 Result<std::shared_ptr<Array>> Create() {
609 RETURN_NOT_OK(VisitTypeInline(*scalar_.type, this));
610 return out_;
611 }
612
613 Status Visit(const NullType& type) {
614 DCHECK(false); // already forwarded to MakeArrayOfNull
615 return Status::OK();
616 }
617
618 Status Visit(const BooleanType&) {
619 ARROW_ASSIGN_OR_RAISE(auto buffer, AllocateBitmap(length_, pool_));
620 bit_util::SetBitsTo(buffer->mutable_data(), 0, length_,
621 checked_cast<const BooleanScalar&>(scalar_).value);
622 out_ = std::make_shared<BooleanArray>(length_, buffer);
623 return Status::OK();
624 }
625
626 template <typename T>
627 enable_if_t<is_number_type<T>::value || is_temporal_type<T>::value, Status> Visit(
628 const T&) {
629 auto value = scalar<T>().value;
630 return FinishFixedWidth(&value, sizeof(value));
631 }
632
633 Status Visit(const FixedSizeBinaryType& type) {
634 auto value = checked_cast<const FixedSizeBinaryScalar&>(scalar_).value;
635 return FinishFixedWidth(value->data(), type.byte_width());
636 }
637
638 template <typename T>
639 enable_if_decimal<T, Status> Visit(const T&) {
640 auto value = scalar<T>().value.ToBytes();
641 return FinishFixedWidth(value.data(), value.size());
642 }
643
644 Status Visit(const Decimal256Type&) {
645 auto value = checked_cast<const Decimal256Scalar&>(scalar_).value.ToBytes();
646 return FinishFixedWidth(value.data(), value.size());
647 }
648
649 template <typename T>
650 enable_if_base_binary<T, Status> Visit(const T&) {
651 const std::shared_ptr<Buffer>& value = scalar<T>().value;
652 std::shared_ptr<Buffer> values_buffer, offsets_buffer;
653 RETURN_NOT_OK(CreateBufferOf(value->data(), value->size(), &values_buffer));
654 auto size = static_cast<typename T::offset_type>(value->size());
655 RETURN_NOT_OK(CreateOffsetsBuffer(size, &offsets_buffer));

Callers 1

MakeArrayFromScalarFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected