Chrysalis - Pattern
Toggle main menu visibility
Loading...
Searching...
No Matches
BaseInstructionsContainer.h
Go to the documentation of this file.
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
14
namespace
Chrysalis
{
15
template
<
typename
T>
16
requires
std::derived_from<T, BaseInstruction>
17
class
BaseInstructionsContainer
:
public
BaseInstruction
{
18
PROVIDE_DEFAULT_SERIALIZATION_ACCESS
(
BaseInstructionsContainer
)
19
SERIALIZE_DERIVED_FROM
(
BaseInstruction
, options_, expressions_, instructions_);
20
public
:
21
explicit
BaseInstructionsContainer
(
OptionsContainer
*
options
,
ExpressionsContainer
*
expressions
)
22
: options_(
options
), expressions_(
expressions
) {}
23
~BaseInstructionsContainer
()
override
{
24
delete
options_;
25
delete
expressions_;
26
for
(
const
auto
& instruction: instructions_)
delete
instruction;
27
}
28
void
ignore
()
override
{
29
for
(
const
auto
& instruction: instructions_) {
30
instruction->ignore();
31
}
32
}
33
void
add
(T* instruction) {
34
lastInstruction_ = instructions_.insert(
35
lastInstruction_ == instructions_.end() ? instructions_.end() : std::next(lastInstruction_),
36
instruction
37
);
38
// (*lastInstruction_)->run();
39
}
40
std::list<T*>::const_iterator
begin
()
const
{
41
return
instructions_.begin();
42
}
43
std::list<T*>::const_iterator
end
()
const
{
44
return
instructions_.end();
45
}
46
[[nodiscard]]
OptionsContainer
*
options
()
const
{
47
return
options_;
48
}
49
[[nodiscard]]
ExpressionsContainer
*
expressions
()
const
{
50
return
expressions_;
51
}
52
protected
:
53
void
execute
()
override
{
54
for
(
auto
it = instructions_.begin(); it != instructions_.end(); ++it) {
55
(*it)->run();
56
std::this_thread::sleep_for(std::chrono::milliseconds(50));
57
lastInstruction_ = it;
58
}
59
}
60
private
:
62
OptionsContainer
* options_;
64
ExpressionsContainer
* expressions_;
66
std::list<T*> instructions_;
67
std::list<T*>::iterator lastInstruction_ = instructions_.end();
68
};
69
using
InstructionsContainer
=
BaseInstructionsContainer<BaseInstruction>
;
70
}
72
73
#endif
//CHRYSALIS_BASEINSTRUCTIONSCONTAINER_H
BaseInstruction.h
CompositiveContainer.h
Expression.h
Option.h
Chrysalis::BaseInstruction::BaseInstruction
BaseInstruction()=default
Chrysalis::BaseInstructionsContainer
Definition
BaseInstructionsContainer.h:17
Chrysalis::BaseInstructionsContainer< BaseInstruction >::options
OptionsContainer * options() const
Definition
BaseInstructionsContainer.h:46
Chrysalis::BaseInstructionsContainer::BaseInstructionsContainer
BaseInstructionsContainer(OptionsContainer *options, ExpressionsContainer *expressions)
Definition
BaseInstructionsContainer.h:21
Chrysalis::BaseInstructionsContainer::ignore
void ignore() override
Definition
BaseInstructionsContainer.h:28
Chrysalis::BaseInstructionsContainer< BaseInstruction >::expressions
ExpressionsContainer * expressions() const
Definition
BaseInstructionsContainer.h:49
Chrysalis::BaseInstructionsContainer::end
std::list< T * >::const_iterator end() const
Definition
BaseInstructionsContainer.h:43
Chrysalis::BaseInstructionsContainer::execute
void execute() override
Definition
BaseInstructionsContainer.h:53
Chrysalis::BaseInstructionsContainer::add
void add(T *instruction)
Definition
BaseInstructionsContainer.h:33
Chrysalis::BaseInstructionsContainer::begin
std::list< T * >::const_iterator begin() const
Definition
BaseInstructionsContainer.h:40
Chrysalis::BaseInstructionsContainer::~BaseInstructionsContainer
~BaseInstructionsContainer() override
Definition
BaseInstructionsContainer.h:23
Chrysalis
Definition
Argument.h:9
Chrysalis::ExpressionsContainer
ScopedNamedElementsContainer< Expression > ExpressionsContainer
Definition
Expression.h:23
Chrysalis::OptionsContainer
ScopedNamedElementsContainer< Option > OptionsContainer
Definition
Option.h:27
Chrysalis::InstructionsContainer
BaseInstructionsContainer< BaseInstruction > InstructionsContainer
Definition
BaseInstructionsContainer.h:69
PROVIDE_DEFAULT_SERIALIZATION_ACCESS
#define PROVIDE_DEFAULT_SERIALIZATION_ACCESS(Class)
Definition
serialization.h:45
SERIALIZE_DERIVED_FROM
#define SERIALIZE_DERIVED_FROM(Base,...)
Definition
serialization.h:71
pattern
include
instructions
BaseInstructionsContainer.h
Generated by
1.17.0