MXS-1632: Rename value_type to ValueType

Renamed the type as value_type is too close to the member definition of
value_type in various STL containers. Also formatted with Uncrustify.
This commit is contained in:
Markus Mäkelä
2018-09-14 12:11:10 +03:00
parent 37f693fc0a
commit a2761be953

View File

@ -27,7 +27,7 @@ namespace maxscale
{
template<typename T>
using value_type = typename T::value_type;
using ValueType = typename T::value_type;
/**
* Calculate sum of members
@ -38,9 +38,12 @@ using value_type = typename T::value_type;
* @return Sum of member values
*/
template<typename T, typename R>
R sum(const T& values, R value_type<T>::*member)
R sum(const T& values, R ValueType<T>::* member)
{
return std::accumulate(values.begin(), values.end(), R {}, [&](R r, value_type<T> t){
return std::accumulate(values.begin(),
values.end(),
R {},
[&](R r, ValueType<T> t) {
return r + t.*member;
});
}
@ -54,7 +57,7 @@ R sum(const T& values, R value_type<T>::*member)
* @return Average of member values
*/
template<typename T, typename R>
R avg(const T& values, R value_type<T>::*member)
R avg(const T& values, R ValueType<T>::* member)
{
return values.empty() ? R {} : sum(values, member) / static_cast<R>(values.size());
}
@ -68,9 +71,11 @@ R avg(const T& values, R value_type<T>::*member)
* @return The minimum value of T::*member in `values`
*/
template<typename T, typename R>
R min(const T& values, R value_type<T>::*member)
R min(const T& values, R ValueType<T>::* member)
{
auto it = std::min_element(values.begin(), values.end(), [&](value_type<T> a, value_type<T> b) {
auto it = std::min_element(values.begin(),
values.end(),
[&](ValueType<T> a, ValueType<T> b) {
return a.*member < b.*member;
});
return it != values.end() ? (*it).*member : R {};
@ -85,9 +90,11 @@ R min(const T& values, R value_type<T>::*member)
* @return The maximum value of T::*member in `values`
*/
template<typename T, typename R>
R max(const T& values, R value_type<T>::*member)
R max(const T& values, R ValueType<T>::* member)
{
auto it = std::max_element(values.begin(), values.end(), [&](value_type<T> a, value_type<T> b) {
auto it = std::max_element(values.begin(),
values.end(),
[&](ValueType<T> a, ValueType<T> b) {
return a.*member < b.*member;
});
return it != values.end() ? (*it).*member : R {};
@ -105,11 +112,18 @@ R max(const T& values, R value_type<T>::*member)
* @return Accumulated container
*/
template<typename T, typename R, typename Accum>
R accumulate(const T& values, R value_type<T>::*member, Accum accum)
R accumulate(const T& values, R ValueType<T>::* member, Accum accum)
{
return std::accumulate(values.begin(), values.end(), R {}, [&](R r, const value_type<T>& t){
return std::accumulate(values.begin(),
values.end(),
R {},
[&](R r, const ValueType<T>& t) {
std::transform(r.begin(), r.end(), (t.*member).begin(), r.begin(), [&](value_type<R> a, value_type<R> b){
std::transform(r.begin(),
r.end(),
(t.*member).begin(),
r.begin(),
[&](ValueType<R> a, ValueType<R> b) {
return accum(a, b);
});
@ -126,9 +140,9 @@ R accumulate(const T& values, R value_type<T>::*member, Accum accum)
* @return Sum of members
*/
template<typename T, typename R>
R sum_element(const T& values, R value_type<T>::*member)
R sum_element(const T& values, R ValueType<T>::* member)
{
return accumulate(values, member, std::plus<value_type<R>>());
return accumulate(values, member, std::plus<ValueType<R>>());
}
/**
@ -140,13 +154,14 @@ R sum_element(const T& values, R value_type<T>::*member)
* @return Average of members
*/
template<typename T, typename R>
R avg_element(const T& values, R value_type<T>::*member)
R avg_element(const T& values, R ValueType<T>::* member)
{
auto result = sum_element(values, member);
for (auto&& a : result)
{
a /= static_cast<value_type<R>>(values.size());
// Using C-style cast to work around an uncrustify bug
a /= (ValueType<R>)(values.size());
}
return result;
@ -161,9 +176,11 @@ R avg_element(const T& values, R value_type<T>::*member)
* @return Minimum of members
*/
template<typename T, typename R>
R min_element(const T& values, R value_type<T>::*member)
R min_element(const T& values, R ValueType<T>::* member)
{
return accumulate(values, member, [](const value_type<R>& a, const value_type<R>& b){
return accumulate(values,
member,
[](const ValueType<R>& a, const ValueType<R>& b) {
return std::min(a, b);
});
}
@ -177,11 +194,12 @@ R min_element(const T& values, R value_type<T>::*member)
* @return Maximum of members
*/
template<typename T, typename R>
R max_element(const T& values, R value_type<T>::*member)
R max_element(const T& values, R ValueType<T>::* member)
{
return accumulate(values, member, [](const value_type<R>& a, const value_type<R>& b){
return accumulate(values,
member,
[](const ValueType<R>& a, const ValueType<R>& b) {
return std::max(a, b);
});
}
}