pitrou commented on a change in pull request #8542: URL: https://github.com/apache/arrow/pull/8542#discussion_r524304063
########## File path: cpp/src/arrow/util/basic_decimal.cc ########## @@ -490,49 +527,60 @@ static void FixDivisionSigns(BasicDecimal128* result, BasicDecimal128* remainder } } -/// \brief Build a BasicDecimal128 from a list of ints. +/// \brief Build a little endian array of uint64_t from a big endian array of uint32_t. +template <size_t N> +static DecimalStatus BuildFromArray(std::array<uint64_t, N>* result_array, + uint32_t* array, int64_t length) { + for (int64_t i = length - 2 * N - 1; i >= 0; i--) { + if (array[i] != 0) { + return DecimalStatus::kOverflow; + } + } + int64_t next_index = length - 1; + for (size_t i = 0; i < N; i++) { + uint64_t lower_bits = (next_index < 0) ? 0 : array[next_index--]; + (*result_array)[i] = + (next_index < 0) Review comment: I think it's ok as it is. We can revisit later if desired. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org