41template <typename Tp, enable_if_t<std::is_arithmetic<Tp>::value> = 0>
45 constexpr Tp _zero = Tp(0.0);
46 constexpr Tp _one = Tp(1.0);
47 constexpr Tp _hundred = Tp(100.0);
48 Tp&& _pdiff = (_rhs > _zero) ? ((_one - (_lhs / _rhs)) * _hundred) : _zero;
49 return (_pdiff < _zero) ? _zero : _pdiff;
57 return _lhs.percent_diff(_rhs);
60template <
typename Tp,
typename Vp =
typename Tp::value_type>
63 ->
decltype(std::begin(_lhs), Tp{})
67 using Int_t =
decltype(_nl);
69 auto _n = std::min<Int_t>(_nl, _nr);
78 for(Int_t i = 0; i < _n; ++i)
80 auto litr = std::begin(_lhs) + i;
81 auto ritr = std::begin(_rhs) + i;
82 auto itr = std::begin(
_ret) + i;
88template <
typename Tp,
typename Kp =
typename Tp::key_type,
89 typename Mp =
typename Tp::mapped_type>
92 ->
decltype(std::begin(_lhs), Tp{})
94 assert(_lhs.size() == _rhs.size());
96 for(
auto litr = std::begin(_lhs); litr !=
std::end(_lhs); ++litr)
98 auto ritr = _rhs.find(litr->first);
101 _ret[litr->first] = Mp{};
111template <
typename Tp,
size_t... Idx>
114 ->
decltype(std::get<0>(_lhs), Tp{})
118 percent_diff(std::get<Idx>(_lhs), std::get<Idx>(_rhs)));
122template <
typename Tp>
const hash_alias_ptr_t hash_value_t std::string *& _ret
Tp percent_diff(const Tp &, const Tp &)
auto resize(T &,...) -> void
constexpr auto get_size(const Tp &, std::tuple<>) -> size_t
typename std::enable_if< B, T >::type enable_if_t
Alias template for enable_if.
std::integer_sequence< size_t, Idx... > index_sequence
Alias template index_sequence.
lightweight tuple-alternative for meta-programming logic
#define TIMEMORY_FOLD_EXPRESSION(...)