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

Function SingleDivide

cpp/src/arrow/util/basic_decimal.cc:830–853  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

828/// \brief Do a division where the divisor fits into a single 32 bit value.
829template <class DecimalClass>
830static inline DecimalStatus SingleDivide(const uint32_t* dividend,
831 int64_t dividend_length, uint32_t divisor,
832 DecimalClass* remainder,
833 bool dividend_was_negative,
834 bool divisor_was_negative,
835 DecimalClass* result) {
836 uint64_t r = 0;
837 constexpr int64_t kDecimalArrayLength = DecimalClass::kBitWidth / sizeof(uint32_t) + 1;
838 uint32_t result_array[kDecimalArrayLength];
839 for (int64_t j = 0; j < dividend_length; j++) {
840 r <<= 32;
841 r += dividend[j];
842 result_array[j] = static_cast<uint32_t>(r / divisor);
843 r %= divisor;
844 }
845 auto status = BuildFromArray(result, result_array, dividend_length);
846 if (status != DecimalStatus::kSuccess) {
847 return status;
848 }
849
850 *remainder = static_cast<int64_t>(r);
851 FixDivisionSigns(result, remainder, dividend_was_negative, divisor_was_negative);
852 return DecimalStatus::kSuccess;
853}
854
855/// \brief Do a decimal division with remainder.
856template <class DecimalClass>

Callers 1

DecimalDivideFunction · 0.85

Calls 2

BuildFromArrayFunction · 0.85
FixDivisionSignsFunction · 0.85

Tested by

no test coverage detected