GCC Code Coverage Report


Directory: src/
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 0.0% 0 / 0 / 11
Functions: -% 0 / 0 / 0
Branches: -% 0 / 0 / 0

cnt_min.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include "reverse_comparator.hpp"
4
5 template <typename T, typename C = int, typename Comp = std::less<T>> struct cnt_min {
6 T v;
7 C cnt;
8
9 cnt_min() : v(), cnt(0) {}
10 explicit cnt_min(T v_) : v(v_), cnt(1) {}
11 cnt_min(T v_, C cnt_) : v(v_), cnt(cnt_) {}
12
13 friend cnt_min operator + (const cnt_min& a, const cnt_min& b) {
14 if (!b.cnt) return a;
15 else if (!a.cnt) return b;
16 else if (Comp().operator()(a.v, b.v)) return a;
17 else if (Comp().operator()(b.v, a.v)) return b;
18 else return cnt_min(a.v, a.cnt + b.cnt);
19 }
20
21 cnt_min& operator += (const cnt_min& o) {
22 return *this = (*this + o);
23 }
24 };
25
26 template <typename T, typename C = int, typename Comp = std::less<T>> using cnt_max = cnt_min<T, C, reverse_comparator_t<Comp>>;
27