Utils: Make ssize and usize more generic

It now works for all container which implement std::size like C arrays.

Change-Id: I9ccf2c50b4e7518e44890b52686d5561358bcf8d
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Marco Bubke
2023-07-04 16:19:01 +02:00
parent b1423c5818
commit 635e0d6969

View File

@@ -218,14 +218,6 @@ OutputContainer setUnionMerge(InputContainer1 &&input1,
template<class OutputContainer, class InputContainer1, class InputContainer2, class Merge> template<class OutputContainer, class InputContainer1, class InputContainer2, class Merge>
OutputContainer setUnionMerge(InputContainer1 &&input1, InputContainer2 &&input2, Merge merge); OutputContainer setUnionMerge(InputContainer1 &&input1, InputContainer2 &&input2, Merge merge);
/////////////////////////
// usize / ssize
/////////////////////////
template<typename Container>
std::make_unsigned_t<typename Container::size_type> usize(Container container);
template<typename Container>
std::make_signed_t<typename Container::size_type> ssize(Container container);
///////////////////////// /////////////////////////
// setUnion // setUnion
///////////////////////// /////////////////////////
@@ -1340,15 +1332,15 @@ OutputContainer setUnionMerge(InputContainer1 &&input1,
} }
template<typename Container> template<typename Container>
std::make_unsigned_t<typename Container::size_type> usize(Container container) auto usize(const Container &container)
{ {
return static_cast<std::make_unsigned_t<typename Container::size_type>>(container.size()); return static_cast<std::make_unsigned_t<decltype(std::size(container))>>(std::size(container));
} }
template<typename Container> template<typename Container>
std::make_signed_t<typename Container::size_type> ssize(Container container) auto ssize(const Container &container)
{ {
return static_cast<std::make_signed_t<typename Container::size_type>>(container.size()); return static_cast<std::make_signed_t<decltype(std::size(container))>>(std::size(container));
} }
template<typename Compare> template<typename Compare>