| Line |
Branch |
Decision |
Call |
Exec |
Source |
| 1 |
|
|
|
|
#ifndef CHRYSALIS_BASEINSTRUCTIONSCONTAINER_H |
| 2 |
|
|
|
|
#define CHRYSALIS_BASEINSTRUCTIONSCONTAINER_H |
| 3 |
|
|
|
|
|
| 4 |
|
|
|
|
#include <thread> |
| 5 |
|
|
|
|
|
| 6 |
|
|
|
|
#include "Option.h" |
| 7 |
|
|
|
|
#include "Expression.h" |
| 8 |
|
|
|
|
#include "BaseInstruction.h" |
| 9 |
|
|
|
|
#include "CompositiveContainer.h" |
| 10 |
|
|
|
|
|
| 11 |
|
|
|
|
/** @defgroup Instructions Instructions |
| 12 |
|
|
|
|
* @{ |
| 13 |
|
|
|
|
*/ |
| 14 |
|
|
|
|
namespace Chrysalis { |
| 15 |
|
|
|
|
template<typename T> |
| 16 |
|
|
|
|
requires std::derived_from<T, BaseInstruction> |
| 17 |
|
|
|
|
class BaseInstructionsContainer: public BaseInstruction { |
| 18 |
|
|
17/17
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
✓ Call 13 invoked.
✓ Call 14 invoked.
✓ Call 15 invoked.
✓ Call 16 invoked.
|
18 |
PROVIDE_DEFAULT_SERIALIZATION_ACCESS(BaseInstructionsContainer) |
| 19 |
|
|
20/20
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
✓ Call 13 invoked.
✓ Call 14 invoked.
✓ Call 15 invoked.
✓ Call 16 invoked.
✓ Call 17 invoked.
✓ Call 18 invoked.
✓ Call 19 invoked.
|
200 |
SERIALIZE_DERIVED_FROM(BaseInstruction, options_, expressions_, instructions_); |
| 20 |
|
|
|
|
public: |
| 21 |
|
|
1/1
|
63 |
explicit BaseInstructionsContainer(OptionsContainer* options, ExpressionsContainer* expressions) |
| 22 |
|
|
25/25
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
✓ Call 13 invoked.
✓ Call 14 invoked.
✓ Call 15 invoked.
✓ Call 16 invoked.
✓ Call 17 invoked.
✓ Call 18 invoked.
✓ Call 19 invoked.
✓ Call 20 invoked.
✓ Call 21 invoked.
✓ Call 22 invoked.
✓ Call 23 invoked.
✓ Call 24 invoked.
|
63 |
: options_(options), expressions_(expressions) {} |
| 23 |
|
|
|
216 |
~BaseInstructionsContainer() override { |
| 24 |
1/2
✓ Branch 3 taken 81 times.
✗ Branch 4 not taken.
|
|
10/10
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
|
162 |
delete options_; |
| 25 |
1/2
✓ Branch 4 taken 81 times.
✗ Branch 5 not taken.
|
|
11/11
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
|
162 |
delete expressions_; |
| 26 |
3/4
✓ Branch 12 taken 291 times.
✗ Branch 13 not taken.
✓ Branch 29 taken 291 times.
✓ Branch 30 taken 81 times.
|
0/1
? Decision couldn't be analyzed.
|
27/27
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 14 invoked.
✓ Call 15 invoked.
✓ Call 16 invoked.
✓ Call 17 invoked.
✓ Call 18 invoked.
✓ Call 19 invoked.
✓ Call 20 invoked.
✓ Call 21 invoked.
✓ Call 22 invoked.
✓ Call 23 invoked.
✓ Call 24 invoked.
✓ Call 25 invoked.
✓ Call 26 invoked.
✓ Call 27 invoked.
✓ Call 28 invoked.
|
744 |
for (const auto& instruction: instructions_) delete instruction; |
| 27 |
|
|
12/12
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
|
378 |
} |
| 28 |
|
|
|
42 |
void ignore() override { |
| 29 |
2/2
✓ Branch 13 taken 252 times.
✓ Branch 14 taken 42 times.
|
2/2
✓ Decision 'true' taken 252 times.
✓ Decision 'false' taken 42 times.
|
13/13
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
|
294 |
for (const auto& instruction: instructions_) { |
| 30 |
2/3
✓ Branch 13 taken 63 times.
✓ Branch 14 taken 189 times.
✗ Branch 15 not taken.
|
|
14/14
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
✓ Call 13 invoked.
|
252 |
instruction->ignore(); |
| 31 |
|
|
|
|
} |
| 32 |
|
|
|
42 |
} |
| 33 |
|
|
|
97 |
void add(T* instruction) { |
| 34 |
1/2
✓ Branch 7 taken 97 times.
✗ Branch 8 not taken.
|
|
15/17
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
✓ Call 13 invoked.
✓ Call 14 invoked.
✓ Call 15 invoked.
✓ Call 16 invoked.
✗ Call 17 not invoked.
✗ Call 18 not invoked.
|
291 |
lastInstruction_ = instructions_.insert( |
| 35 |
2/2
✓ Branch 11 taken 24 times.
✓ Branch 12 taken 73 times.
|
|
22/24
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 13 invoked.
✓ Call 14 invoked.
✓ Call 15 invoked.
✓ Call 16 invoked.
✓ Call 17 invoked.
✓ Call 18 invoked.
✓ Call 19 invoked.
✓ Call 20 invoked.
✓ Call 21 invoked.
✓ Call 22 invoked.
✓ Call 23 invoked.
✗ Call 24 not invoked.
✗ Call 25 not invoked.
|
267 |
lastInstruction_ == instructions_.end() ? instructions_.end() : std::next(lastInstruction_), |
| 36 |
|
|
|
|
instruction |
| 37 |
|
|
|
|
); |
| 38 |
|
|
|
|
// (*lastInstruction_)->run(); |
| 39 |
|
|
|
97 |
} |
| 40 |
|
|
|
12 |
std::list<T*>::const_iterator begin() const { |
| 41 |
|
|
6/6
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
|
12 |
return instructions_.begin(); |
| 42 |
|
|
|
|
} |
| 43 |
|
|
|
12 |
std::list<T*>::const_iterator end() const { |
| 44 |
|
|
6/6
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
|
12 |
return instructions_.end(); |
| 45 |
|
|
|
|
} |
| 46 |
|
|
|
59 |
[[nodiscard]] OptionsContainer* options() const { |
| 47 |
|
|
4/4
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
|
59 |
return options_; |
| 48 |
|
|
|
|
} |
| 49 |
|
|
|
83 |
[[nodiscard]] ExpressionsContainer* expressions() const { |
| 50 |
|
|
4/4
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
|
83 |
return expressions_; |
| 51 |
|
|
|
|
} |
| 52 |
|
|
|
|
protected: |
| 53 |
|
|
|
48 |
void execute() override { |
| 54 |
2/2
✓ Branch 13 taken 267 times.
✓ Branch 14 taken 48 times.
|
2/2
✓ Decision 'true' taken 267 times.
✓ Decision 'false' taken 48 times.
|
13/13
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
|
315 |
for (auto it = instructions_.begin(); it != instructions_.end(); ++it) { |
| 55 |
2/3
✓ Branch 6 taken 63 times.
✓ Branch 7 taken 204 times.
✗ Branch 8 not taken.
|
|
7/7
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
|
267 |
(*it)->run(); |
| 56 |
1/2
✓ Branch 6 taken 267 times.
✗ Branch 7 not taken.
|
|
8/10
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✗ Call 10 not invoked.
✗ Call 11 not invoked.
|
267 |
std::this_thread::sleep_for(std::chrono::milliseconds(50)); |
| 57 |
|
|
5/5
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
|
267 |
lastInstruction_ = it; |
| 58 |
|
|
|
|
} |
| 59 |
|
|
|
48 |
} |
| 60 |
|
|
|
|
private: |
| 61 |
|
|
|
|
/// @uml{composition} |
| 62 |
|
|
|
|
OptionsContainer* options_; |
| 63 |
|
|
|
|
/// @uml{composition} |
| 64 |
|
|
|
|
ExpressionsContainer* expressions_; |
| 65 |
|
|
|
|
/// @uml{composition} |
| 66 |
|
|
|
|
std::list<T*> instructions_; |
| 67 |
|
|
|
|
std::list<T*>::iterator lastInstruction_ = instructions_.end(); |
| 68 |
|
|
|
|
}; |
| 69 |
|
|
|
|
using InstructionsContainer = BaseInstructionsContainer<BaseInstruction>; |
| 70 |
|
|
|
|
} |
| 71 |
|
|
|
|
/**@}*/ |
| 72 |
|
|
|
|
|
| 73 |
|
|
|
|
#endif //CHRYSALIS_BASEINSTRUCTIONSCONTAINER_H |
| 74 |
|
|
|
|
|