Chrysalis - Pattern
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"
10
14namespace Chrysalis {
15 template<typename T>
16 requires std::derived_from<T, BaseInstruction>
19 SERIALIZE_DERIVED_FROM(BaseInstruction, options_, expressions_, instructions_);
20 public:
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 };
70}
72
73#endif //CHRYSALIS_BASEINSTRUCTIONSCONTAINER_H
Definition BaseInstructionsContainer.h:17
OptionsContainer * options() const
Definition BaseInstructionsContainer.h:46
BaseInstructionsContainer(OptionsContainer *options, ExpressionsContainer *expressions)
Definition BaseInstructionsContainer.h:21
void ignore() override
Definition BaseInstructionsContainer.h:28
ExpressionsContainer * expressions() const
Definition BaseInstructionsContainer.h:49
std::list< T * >::const_iterator end() const
Definition BaseInstructionsContainer.h:43
void execute() override
Definition BaseInstructionsContainer.h:53
void add(T *instruction)
Definition BaseInstructionsContainer.h:33
std::list< T * >::const_iterator begin() const
Definition BaseInstructionsContainer.h:40
~BaseInstructionsContainer() override
Definition BaseInstructionsContainer.h:23
Definition Argument.h:9
ScopedNamedElementsContainer< Expression > ExpressionsContainer
Definition Expression.h:23
ScopedNamedElementsContainer< Option > OptionsContainer
Definition Option.h:27
BaseInstructionsContainer< BaseInstruction > InstructionsContainer
Definition BaseInstructionsContainer.h:69
#define PROVIDE_DEFAULT_SERIALIZATION_ACCESS(Class)
Definition serialization.h:45
#define SERIALIZE_DERIVED_FROM(Base,...)
Definition serialization.h:71