diff --git a/include/maxscale/statistics.hh b/include/maxscale/statistics.hh index cd5b2d192..5aaa7eb5e 100644 --- a/include/maxscale/statistics.hh +++ b/include/maxscale/statistics.hh @@ -26,8 +26,8 @@ namespace maxscale { -template -using value_type = typename T::value_type; +template +using ValueType = typename T::value_type; /** * Calculate sum of members @@ -37,12 +37,15 @@ using value_type = typename T::value_type; * * @return Sum of member values */ -template -R sum(const T& values, R value_type::*member) +template +R sum(const T& values, R ValueType::* member) { - return std::accumulate(values.begin(), values.end(), R {}, [&](R r, value_type t){ - return r + t.*member; - }); + return std::accumulate(values.begin(), + values.end(), + R {}, + [&](R r, ValueType t) { + return r + t.*member; + }); } /** @@ -53,10 +56,10 @@ R sum(const T& values, R value_type::*member) * * @return Average of member values */ -template -R avg(const T& values, R value_type::*member) +template +R avg(const T& values, R ValueType::* member) { - return values.empty() ? R{} : sum(values, member) / static_cast(values.size()); + return values.empty() ? R {} : sum(values, member) / static_cast(values.size()); } /** @@ -67,13 +70,15 @@ R avg(const T& values, R value_type::*member) * * @return The minimum value of T::*member in `values` */ -template -R min(const T& values, R value_type::*member) +template +R min(const T& values, R ValueType::* member) { - auto it = std::min_element(values.begin(), values.end(), [&](value_type a, value_type b) { - return a.*member < b.*member; - }); - return it != values.end() ? (*it).*member : R{}; + auto it = std::min_element(values.begin(), + values.end(), + [&](ValueType a, ValueType b) { + return a.*member < b.*member; + }); + return it != values.end() ? (*it).*member : R {}; } /** @@ -84,13 +89,15 @@ R min(const T& values, R value_type::*member) * * @return The maximum value of T::*member in `values` */ -template -R max(const T& values, R value_type::*member) +template +R max(const T& values, R ValueType::* member) { - auto it = std::max_element(values.begin(), values.end(), [&](value_type a, value_type b) { - return a.*member < b.*member; - }); - return it != values.end() ? (*it).*member : R{}; + auto it = std::max_element(values.begin(), + values.end(), + [&](ValueType a, ValueType b) { + return a.*member < b.*member; + }); + return it != values.end() ? (*it).*member : R {}; } /** @@ -104,17 +111,24 @@ R max(const T& values, R value_type::*member) * * @return Accumulated container */ -template -R accumulate(const T& values, R value_type::*member, Accum accum) +template +R accumulate(const T& values, R ValueType::* member, Accum accum) { - return std::accumulate(values.begin(), values.end(), R {}, [&](R r, const value_type& t){ + return std::accumulate(values.begin(), + values.end(), + R {}, + [&](R r, const ValueType& t) { - std::transform(r.begin(), r.end(), (t.*member).begin(), r.begin(), [&](value_type a, value_type b){ - return accum(a, b); - }); - - return r; - }); + std::transform(r.begin(), + r.end(), + (t.*member).begin(), + r.begin(), + [&](ValueType a, ValueType b) { + return accum(a, b); + }); + + return r; + }); } /** @@ -125,10 +139,10 @@ R accumulate(const T& values, R value_type::*member, Accum accum) * * @return Sum of members */ -template -R sum_element(const T& values, R value_type::*member) +template +R sum_element(const T& values, R ValueType::* member) { - return accumulate(values, member, std::plus>()); + return accumulate(values, member, std::plus>()); } /** @@ -139,14 +153,15 @@ R sum_element(const T& values, R value_type::*member) * * @return Average of members */ -template -R avg_element(const T& values, R value_type::*member) +template +R avg_element(const T& values, R ValueType::* member) { auto result = sum_element(values, member); for (auto&& a : result) { - a /= static_cast>(values.size()); + // Using C-style cast to work around an uncrustify bug + a /= (ValueType)(values.size()); } return result; @@ -160,12 +175,14 @@ R avg_element(const T& values, R value_type::*member) * * @return Minimum of members */ -template -R min_element(const T& values, R value_type::*member) +template +R min_element(const T& values, R ValueType::* member) { - return accumulate(values, member, [](const value_type& a, const value_type& b){ - return std::min(a, b); - }); + return accumulate(values, + member, + [](const ValueType& a, const ValueType& b) { + return std::min(a, b); + }); } /** @@ -176,12 +193,13 @@ R min_element(const T& values, R value_type::*member) * * @return Maximum of members */ -template -R max_element(const T& values, R value_type::*member) +template +R max_element(const T& values, R ValueType::* member) { - return accumulate(values, member, [](const value_type& a, const value_type& b){ - return std::max(a, b); - }); + return accumulate(values, + member, + [](const ValueType& a, const ValueType& b) { + return std::max(a, b); + }); } - }