Line | Branch | Decision | Exec | Source |
---|---|---|---|---|
1 | #pragma once | |||
2 | ||||
3 | template <typename T, int TSlots> | |||
4 | struct static_vector { | |||
5 | ||||
6 | 679 | void clear() { | ||
7 | 679 | m_size = 0; | ||
8 | 679 | } | ||
9 | ||||
10 | template <typename TSearch> | |||
11 | 3031 | T* find(const TSearch& search) const { | ||
12 |
2/2✓ Branch 0 taken 4431 times.
✓ Branch 1 taken 220 times.
|
2/2✓ Decision 'true' taken 4431 times.
✓ Decision 'false' taken 220 times.
|
4651 | for (size_t i = 0; i < m_size; i++) { |
13 |
2/2✓ Branch 2 taken 2811 times.
✓ Branch 3 taken 1620 times.
|
2/2✓ Decision 'true' taken 2811 times.
✓ Decision 'false' taken 1620 times.
|
4431 | if (m_storage[i] == search) { |
14 | 2811 | return const_cast<T*>(&m_storage[i]); | ||
15 | } | |||
16 | } | |||
17 | ||||
18 | 220 | return nullptr; | ||
19 | } | |||
20 | ||||
21 | 110 | T* add(const T& value) { | ||
22 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 110 times.
|
1/2✗ Decision 'true' not taken.
✓ Decision 'false' taken 110 times.
|
110 | if (m_size >= TSlots) { |
23 | // vector full, discard | |||
24 | ✗ | return nullptr; | ||
25 | } | |||
26 | ||||
27 | 110 | T& location = m_storage[m_size]; | ||
28 | ||||
29 | 110 | location = value; | ||
30 | 110 | m_size++; | ||
31 | ||||
32 | 110 | return &location; | ||
33 | } | |||
34 | ||||
35 | 174430 | T& get(size_t i) { | ||
36 | 174430 | return m_storage[i]; | ||
37 | } | |||
38 | ||||
39 | 697418 | size_t getCount() const { | ||
40 | 697418 | return m_size; | ||
41 | } | |||
42 | ||||
43 | private: | |||
44 | T m_storage[TSlots]; | |||
45 | // wow: order of field declaration matters here, gcc glitch? | |||
46 | size_t m_size = 0; | |||
47 | }; | |||
48 |