GCC Code Coverage Report


Directory: ./
File: src/iguana/services/ConcurrentParam.cc
Date: 2025-11-25 17:57:04
Coverage Exec Excl Total
Lines: 23.4% 52 0 222
Functions: 22.7% 15 0 66
Branches: 8.2% 14 0 170

Line Branch Exec Source
1 #include "ConcurrentParam.h"
2
3 namespace iguana {
4
5 // ==================================================================================
6 // Constructors
7 // ==================================================================================
8
9 template <typename T>
10 40 ConcurrentParam<T>::ConcurrentParam(std::string const& model)
11 {
12
2/12
iguana::ConcurrentParam<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::ConcurrentParam(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 47 not taken.
iguana::ConcurrentParam<std::vector<double, std::allocator<double> > >::ConcurrentParam(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✗ Branch 8 → 9 not taken.
✓ Branch 8 → 47 taken 24 times.
iguana::ConcurrentParam<std::vector<int, std::allocator<int> > >::ConcurrentParam(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 47 not taken.
iguana::ConcurrentParam<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::ConcurrentParam(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 47 not taken.
iguana::ConcurrentParam<double>::ConcurrentParam(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✗ Branch 8 → 9 not taken.
✗ Branch 8 → 47 not taken.
iguana::ConcurrentParam<int>::ConcurrentParam(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
✗ Branch 8 → 9 not taken.
✓ Branch 8 → 47 taken 16 times.
80 if(GlobalConcurrencyModel() != model)
13 throw std::runtime_error(
14 "attempted to construct a ConcurrentParam with model '" +
15 model + "', but GlobalConcurrencyModel is '" + GlobalConcurrencyModel() + "'");
16 40 }
17
18 template <typename T>
19 14 SingleThreadParam<T>::SingleThreadParam()
20
2/12
iguana::SingleThreadParam<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::SingleThreadParam():
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 10 not taken.
iguana::SingleThreadParam<std::vector<double, std::allocator<double> > >::SingleThreadParam():
✓ Branch 3 → 4 taken 9 times.
✗ Branch 3 → 10 not taken.
iguana::SingleThreadParam<std::vector<int, std::allocator<int> > >::SingleThreadParam():
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 10 not taken.
iguana::SingleThreadParam<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::SingleThreadParam():
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 10 not taken.
iguana::SingleThreadParam<double>::SingleThreadParam():
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 10 not taken.
iguana::SingleThreadParam<int>::SingleThreadParam():
✓ Branch 3 → 4 taken 5 times.
✗ Branch 3 → 10 not taken.
23 : ConcurrentParam<T>("single")
21 {
22 14 this->m_needs_hashing = false;
23 14 }
24
25 template <typename T>
26 26 MemoizedParam<T>::MemoizedParam()
27
2/12
iguana::MemoizedParam<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::MemoizedParam():
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 10 not taken.
iguana::MemoizedParam<std::vector<double, std::allocator<double> > >::MemoizedParam():
✓ Branch 3 → 4 taken 15 times.
✗ Branch 3 → 10 not taken.
iguana::MemoizedParam<std::vector<int, std::allocator<int> > >::MemoizedParam():
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 10 not taken.
iguana::MemoizedParam<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::MemoizedParam():
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 10 not taken.
iguana::MemoizedParam<double>::MemoizedParam():
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 10 not taken.
iguana::MemoizedParam<int>::MemoizedParam():
✓ Branch 3 → 4 taken 11 times.
✗ Branch 3 → 10 not taken.
52 : ConcurrentParam<T>("memoize")
28 {
29 26 this->m_needs_hashing = true;
30 26 }
31
32 // ==================================================================================
33 // Load methods
34 // ==================================================================================
35
36 template <typename T>
37
0/2
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
6284 T const SingleThreadParam<T>::Load(concurrent_key_t const key) const
38 {
39 6284 return m_value;
40 }
41
42 template <typename T>
43
2/12
iguana::MemoizedParam<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::Load(unsigned long) const:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
iguana::MemoizedParam<std::vector<double, std::allocator<double> > >::Load(unsigned long) const:
✓ Branch 2 → 3 taken 1301 times.
✗ Branch 2 → 4 not taken.
iguana::MemoizedParam<std::vector<int, std::allocator<int> > >::Load(unsigned long) const:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
iguana::MemoizedParam<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Load(unsigned long) const:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
iguana::MemoizedParam<double>::Load(unsigned long) const:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
iguana::MemoizedParam<int>::Load(unsigned long) const:
✓ Branch 2 → 3 taken 1 time.
✗ Branch 2 → 4 not taken.
1302 T const MemoizedParam<T>::Load(concurrent_key_t const key) const
44 {
45
2/12
iguana::MemoizedParam<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::Load(unsigned long) const:
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 7 not taken.
iguana::MemoizedParam<std::vector<double, std::allocator<double> > >::Load(unsigned long) const:
✓ Branch 4 → 5 taken 1301 times.
✗ Branch 4 → 7 not taken.
iguana::MemoizedParam<std::vector<int, std::allocator<int> > >::Load(unsigned long) const:
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 7 not taken.
iguana::MemoizedParam<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Load(unsigned long) const:
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 9 not taken.
iguana::MemoizedParam<double>::Load(unsigned long) const:
✗ Branch 4 → 5 not taken.
✗ Branch 4 → 6 not taken.
iguana::MemoizedParam<int>::Load(unsigned long) const:
✓ Branch 4 → 5 taken 1 time.
✗ Branch 4 → 6 not taken.
1302 if(auto it{m_container.find(key)}; it != m_container.end())
46 1302 return it->second;
47 throw std::runtime_error("MemoizedParam::Load failed to find the parameter");
48 }
49
50 // ==================================================================================
51 // Save methods
52 // ==================================================================================
53
54 template <typename T>
55 14 void SingleThreadParam<T>::Save(T const& value, concurrent_key_t const key)
56 {
57 14 this->m_empty = false;
58 14 m_value = value;
59 14 }
60
61 template <typename T>
62 25 void MemoizedParam<T>::Save(T const& value, concurrent_key_t const key)
63 {
64 25 std::lock_guard<std::mutex> const lock(this->m_mutex);
65
2/12
iguana::MemoizedParam<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::Save(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, unsigned long):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 10 not taken.
iguana::MemoizedParam<std::vector<double, std::allocator<double> > >::Save(std::vector<double, std::allocator<double> > const&, unsigned long):
✓ Branch 3 → 4 taken 15 times.
✗ Branch 3 → 14 not taken.
iguana::MemoizedParam<std::vector<int, std::allocator<int> > >::Save(std::vector<int, std::allocator<int> > const&, unsigned long):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 14 not taken.
iguana::MemoizedParam<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Save(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 5 not taken.
iguana::MemoizedParam<double>::Save(double const&, unsigned long):
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 6 not taken.
iguana::MemoizedParam<int>::Save(int const&, unsigned long):
✓ Branch 3 → 4 taken 10 times.
✗ Branch 3 → 6 not taken.
25 this->m_empty = false;
66 25 m_container.insert({key, value});
67 25 }
68
69 // ==================================================================================
70 // HasKey methods
71 // ==================================================================================
72
73 template <typename T>
74 bool SingleThreadParam<T>::HasKey(concurrent_key_t const key) const
75 {
76 throw std::runtime_error("do not call ConcurrentParam::HasKey when model is 'single'");
77 }
78
79 template <typename T>
80
2/12
iguana::MemoizedParam<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::HasKey(unsigned long) const:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
iguana::MemoizedParam<std::vector<double, std::allocator<double> > >::HasKey(unsigned long) const:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
iguana::MemoizedParam<std::vector<int, std::allocator<int> > >::HasKey(unsigned long) const:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
iguana::MemoizedParam<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::HasKey(unsigned long) const:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
iguana::MemoizedParam<double>::HasKey(unsigned long) const:
✗ Branch 2 → 3 not taken.
✗ Branch 2 → 4 not taken.
iguana::MemoizedParam<int>::HasKey(unsigned long) const:
✓ Branch 2 → 3 taken 4995 times.
✓ Branch 2 → 4 taken 10 times.
5005 bool MemoizedParam<T>::HasKey(concurrent_key_t const key) const
81 {
82 5005 return m_container.find(key) != m_container.end();
83 }
84
85 // ==================================================================================
86 // GetSize() methods
87 // ==================================================================================
88 template <typename T>
89 std::size_t SingleThreadParam<T>::GetSize() const
90 {
91 return 1;
92 }
93
94 template <typename T>
95 std::size_t MemoizedParam<T>::GetSize() const
96 {
97 return m_container.size();
98 }
99
100 // ==================================================================================
101 // template specializations
102 // ==================================================================================
103
104 template class ConcurrentParam<int>;
105 template class ConcurrentParam<double>;
106 template class ConcurrentParam<std::string>;
107 template class ConcurrentParam<std::vector<int>>;
108 template class ConcurrentParam<std::vector<double>>;
109 template class ConcurrentParam<std::vector<std::string>>;
110
111 template class SingleThreadParam<int>;
112 template class SingleThreadParam<double>;
113 template class SingleThreadParam<std::string>;
114 template class SingleThreadParam<std::vector<int>>;
115 template class SingleThreadParam<std::vector<double>>;
116 template class SingleThreadParam<std::vector<std::string>>;
117
118 template class MemoizedParam<int>;
119 template class MemoizedParam<double>;
120 template class MemoizedParam<std::string>;
121 template class MemoizedParam<std::vector<int>>;
122 template class MemoizedParam<std::vector<double>>;
123 template class MemoizedParam<std::vector<std::string>>;
124
125 }
126