Remove even more code

This commit is contained in:
Alexey Milovidov 2021-01-26 22:39:03 +03:00
parent f3929b151a
commit d296424dfa
8 changed files with 19 additions and 86 deletions

View File

@ -296,12 +296,7 @@ public:
if (size) if (size)
{ {
typename ColumnVector<T>::Container & data_to = assert_cast<ColumnVector<T> &>(arr_to.getData()).getData(); typename ColumnVector<T>::Container & data_to = assert_cast<ColumnVector<T> &>(arr_to.getData()).getData();
if constexpr (is_big_int_v<T>) data_to.insert(this->data(place).value.begin(), this->data(place).value.end());
// is data_to empty? we should probably use std::vector::insert then
for (auto it = this->data(place).value.begin(); it != this->data(place).value.end(); it++)
data_to.push_back(*it);
else
data_to.insert(this->data(place).value.begin(), this->data(place).value.end());
} }
} }

View File

@ -474,8 +474,6 @@ void ColumnVector<T>::gather(ColumnGathererStream & gatherer)
template <typename T> template <typename T>
void ColumnVector<T>::getExtremes(Field & min, Field & max) const void ColumnVector<T>::getExtremes(Field & min, Field & max) const
{ {
using FastRefT = std::conditional_t<is_big_int_v<T>, const T &, const T>;
size_t size = data.size(); size_t size = data.size();
if (size == 0) if (size == 0)
@ -496,7 +494,7 @@ void ColumnVector<T>::getExtremes(Field & min, Field & max) const
T cur_min = NaNOrZero<T>(); T cur_min = NaNOrZero<T>();
T cur_max = NaNOrZero<T>(); T cur_max = NaNOrZero<T>();
for (FastRefT x : data) for (const T & x : data)
{ {
if (isNaN(x)) if (isNaN(x))
continue; continue;

View File

@ -186,7 +186,7 @@ inline size_t DefaultHash64(std::enable_if_t<(sizeof(T) > sizeof(UInt64)), T> ke
} }
if constexpr (std::is_same_v<T, DB::UInt128>) if constexpr (std::is_same_v<T, DB::UInt128>)
{ {
return intHash64(key.low ^ key.high); return intHash64(key.low ^ key.high); /// TODO This is classical antipattern.
} }
else if constexpr (is_big_int_v<T> && sizeof(T) == 32) else if constexpr (is_big_int_v<T> && sizeof(T) == 32)
{ {

View File

@ -76,18 +76,8 @@ private:
if (rows_remaining != 0) if (rows_remaining != 0)
{ {
RightType right_src_remaining[Impl::rows_per_iteration]; RightType right_src_remaining[Impl::rows_per_iteration];
if constexpr (!is_big_int_v<RightType> && !std::is_same_v<RightType, Decimal256>) memcpy(right_src_remaining, &right_src_data[rows_size], rows_remaining * sizeof(RightType));
{ memset(right_src_remaining + rows_remaining, 0, (Impl::rows_per_iteration - rows_remaining) * sizeof(RightType));
memcpy(right_src_remaining, &right_src_data[rows_size], rows_remaining * sizeof(RightType));
memset(right_src_remaining + rows_remaining, 0, (Impl::rows_per_iteration - rows_remaining) * sizeof(RightType));
}
else
{
for (size_t i = 0; i < rows_remaining; i++)
right_src_remaining[i] = right_src_data[rows_size + i];
for (size_t i = rows_remaining; i < Impl::rows_per_iteration; i++)
right_src_remaining[i] = 0;
}
Float64 dst_remaining[Impl::rows_per_iteration]; Float64 dst_remaining[Impl::rows_per_iteration];
Impl::execute(left_src_data, right_src_remaining, dst_remaining); Impl::execute(left_src_data, right_src_remaining, dst_remaining);
@ -123,32 +113,13 @@ private:
if (rows_remaining != 0) if (rows_remaining != 0)
{ {
LeftType left_src_remaining[Impl::rows_per_iteration]; LeftType left_src_remaining[Impl::rows_per_iteration];
if constexpr (!is_big_int_v<LeftType> && !std::is_same_v<LeftType, Decimal256>) memcpy(left_src_remaining, &left_src_data[rows_size], rows_remaining * sizeof(LeftType));
{ memset(left_src_remaining + rows_remaining, 0, (Impl::rows_per_iteration - rows_remaining) * sizeof(LeftType));
memcpy(left_src_remaining, &left_src_data[rows_size], rows_remaining * sizeof(LeftType));
memset(left_src_remaining + rows_remaining, 0, (Impl::rows_per_iteration - rows_remaining) * sizeof(LeftType));
}
else
{
for (size_t i = 0; i < rows_remaining; i++)
left_src_remaining[i] = left_src_data[rows_size + i];
for (size_t i = rows_remaining; i < Impl::rows_per_iteration; i++)
left_src_remaining[i] = 0;
}
RightType right_src_remaining[Impl::rows_per_iteration]; RightType right_src_remaining[Impl::rows_per_iteration];
if constexpr (!is_big_int_v<RightType> && !std::is_same_v<RightType, Decimal256>) memcpy(right_src_remaining, &right_src_data[rows_size], rows_remaining * sizeof(RightType));
{ memset(right_src_remaining + rows_remaining, 0, (Impl::rows_per_iteration - rows_remaining) * sizeof(RightType));
memcpy(right_src_remaining, &right_src_data[rows_size], rows_remaining * sizeof(RightType));
memset(right_src_remaining + rows_remaining, 0, (Impl::rows_per_iteration - rows_remaining) * sizeof(RightType));
}
else
{
for (size_t i = 0; i < rows_remaining; i++)
right_src_remaining[i] = right_src_data[rows_size + i];
for (size_t i = rows_remaining; i < Impl::rows_per_iteration; i++)
right_src_remaining[i] = 0;
}
Float64 dst_remaining[Impl::rows_per_iteration]; Float64 dst_remaining[Impl::rows_per_iteration];
Impl::execute(left_src_remaining, right_src_remaining, dst_remaining); Impl::execute(left_src_remaining, right_src_remaining, dst_remaining);
@ -178,18 +149,8 @@ private:
if (rows_remaining != 0) if (rows_remaining != 0)
{ {
LeftType left_src_remaining[Impl::rows_per_iteration]; LeftType left_src_remaining[Impl::rows_per_iteration];
if constexpr (!is_big_int_v<LeftType> && !std::is_same_v<LeftType, Decimal256>) memcpy(left_src_remaining, &left_src_data[rows_size], rows_remaining * sizeof(LeftType));
{ memset(left_src_remaining + rows_remaining, 0, (Impl::rows_per_iteration - rows_remaining) * sizeof(LeftType));
memcpy(left_src_remaining, &left_src_data[rows_size], rows_remaining * sizeof(LeftType));
memset(left_src_remaining + rows_remaining, 0, (Impl::rows_per_iteration - rows_remaining) * sizeof(LeftType));
}
else
{
for (size_t i = 0; i < rows_remaining; i++)
left_src_remaining[i] = left_src_data[rows_size + i];
for (size_t i = rows_remaining; i < Impl::rows_per_iteration; i++)
left_src_remaining[i] = 0;
}
Float64 dst_remaining[Impl::rows_per_iteration]; Float64 dst_remaining[Impl::rows_per_iteration];

View File

@ -87,18 +87,8 @@ private:
if (rows_remaining != 0) if (rows_remaining != 0)
{ {
T src_remaining[Impl::rows_per_iteration]; T src_remaining[Impl::rows_per_iteration];
if constexpr (is_big_int_v<T> || std::is_same_v<T, Decimal256>) memcpy(src_remaining, &src_data[rows_size], rows_remaining * sizeof(T));
{ memset(src_remaining + rows_remaining, 0, (Impl::rows_per_iteration - rows_remaining) * sizeof(T));
for (size_t i = 0; i < rows_remaining; i++)
src_remaining[i] = src_data[rows_size + i];
for (size_t i = rows_remaining; i < Impl::rows_per_iteration; i++)
src_remaining[i] = 0;
}
else
{
memcpy(src_remaining, &src_data[rows_size], rows_remaining * sizeof(T));
memset(src_remaining + rows_remaining, 0, (Impl::rows_per_iteration - rows_remaining) * sizeof(T));
}
ReturnType dst_remaining[Impl::rows_per_iteration]; ReturnType dst_remaining[Impl::rows_per_iteration];
Impl::execute(src_remaining, dst_remaining); Impl::execute(src_remaining, dst_remaining);

View File

@ -440,13 +440,7 @@ public:
} }
else else
{ {
if constexpr (!is_big_int_v<NativeType>) memcpy(out.data(), in.data(), in.size() * sizeof(T));
memcpy(out.data(), in.data(), in.size() * sizeof(T));
else
{
for (size_t i = 0; i < in.size(); i++)
out[i] = in[i];
}
} }
} }
}; };

View File

@ -257,8 +257,7 @@ enum class ReadIntTextCheckOverflow
template <typename T, typename ReturnType = void, ReadIntTextCheckOverflow check_overflow = ReadIntTextCheckOverflow::DO_NOT_CHECK_OVERFLOW> template <typename T, typename ReturnType = void, ReadIntTextCheckOverflow check_overflow = ReadIntTextCheckOverflow::DO_NOT_CHECK_OVERFLOW>
ReturnType readIntTextImpl(T & x, ReadBuffer & buf) ReturnType readIntTextImpl(T & x, ReadBuffer & buf)
{ {
/// TODO: disabled for big ints cause of 127 vs 128 bit conversion using UnsignedT = make_unsigned_t<T>;
using UnsignedT = std::conditional_t<is_big_int_v<T>, T, make_unsigned_t<T>>;
static constexpr bool throw_exception = std::is_same_v<ReturnType, void>; static constexpr bool throw_exception = std::is_same_v<ReturnType, void>;
@ -318,12 +317,8 @@ ReturnType readIntTextImpl(T & x, ReadBuffer & buf)
|| common::addOverflow<T>(signed_res, (*buf.position() - '0'), signed_res)) || common::addOverflow<T>(signed_res, (*buf.position() - '0'), signed_res))
return ReturnType(false); return ReturnType(false);
/// Cannot assign signed to unsigned for big ints. Ignore fast path. res = signed_res;
if constexpr (!is_big_int_v<T>) break;
{
res = signed_res;
break;
}
} }
} }
res *= 10; res *= 10;

View File

@ -923,7 +923,7 @@ inline void writeBinary(const Int256 & x, WriteBuffer & buf) { writePODBinary(x,
/// Methods for outputting the value in text form for a tab-separated format. /// Methods for outputting the value in text form for a tab-separated format.
template <typename T> template <typename T>
inline std::enable_if_t<is_integer_v<T> && !is_big_int_v<T>, void> inline std::enable_if_t<is_integer_v<T>, void>
writeText(const T & x, WriteBuffer & buf) { writeIntText(x, buf); } writeText(const T & x, WriteBuffer & buf) { writeIntText(x, buf); }
template <typename T> template <typename T>