| 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/12iguana::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/12iguana::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/12iguana::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/12iguana::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/12iguana::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/12iguana::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/12iguana::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 |