Chrysalis - Pattern
Loading...
Searching...
No Matches
Project.h
Go to the documentation of this file.
1#ifndef CHRYSALIS_PROJECT_H
2#define CHRYSALIS_PROJECT_H
3
4#include <queue>
5#include <condition_variable>
6
7#include "Option.h"
8#include "Pattern.h"
9#include "Parameter.h"
10#include "Expression.h"
11#include "ProjectSpace.h"
13
14namespace Chrysalis {
15 class Project {
17 public:
18 static constexpr auto PROJECT_FILE_SUFFIX = "chrysalis";
19 static constexpr auto PROJECT_NAME_FILTER = "Chrysalis Project (*.chrysalis)";
20
21 explicit Project(std::string name, std::unique_ptr<ProjectSpace> space,
22 std::unique_ptr<PatternsContainer> patterns, std::unique_ptr<ParametersContainer> parameters,
23 std::unique_ptr<OptionsContainer> options, std::unique_ptr<ExpressionsContainer> expressions,
24 std::unique_ptr<InstructionsContainer> instructions);
25 ~Project();
26
27 static std::unique_ptr<Project> create();
28 static std::unique_ptr<Project> create(const std::string& name);
29
30 std::vector<char> bytes() const;
31 static std::unique_ptr<Project> fromBytes(const char* bytes, size_t size);
32
33 static std::unique_ptr<Project> read(const std::string& filePath);
34 static void write(const std::string& filePath, const Project& project);
35
36 std::string getName();
37 void setName(const std::string& name);
38
39 void execute();
40 void onExecuted(const std::function<void()>& function);
41
42 [[nodiscard]] ProjectSpace* getSpace() const;
43 [[nodiscard]] OptionsContainer* getOptions() const;
44 [[nodiscard]] PatternsContainer* getPatterns() const;
45 [[nodiscard]] ParametersContainer* getParameters() const;
46 [[nodiscard]] ExpressionsContainer* getExpressions() const;
47 [[nodiscard]] InstructionsContainer* getInstructions() const;
48 private:
49 std::mutex mutex_;
50 std::condition_variable startExecution_;
51 std::atomic<bool> pendingExecution_ = false;
52
53 std::queue<std::function<void()>> queue_;
54 std::jthread thread_;
55
56 std::string name_;
58 std::unique_ptr<ProjectSpace> space_;
60 std::unique_ptr<OptionsContainer> options_;
62 std::unique_ptr<PatternsContainer> patterns_;
64 std::unique_ptr<ParametersContainer> parameters_;
66 std::unique_ptr<ExpressionsContainer> expressions_;
68 std::unique_ptr<InstructionsContainer> instructions_;
69 };
70 SERIALIZE_CONSTRUCTION(Project, name_, space_, patterns_, parameters_, options_, expressions_, instructions_)
71}
72
73#endif //CHRYSALIS_PROJECT_H
Definition ProjectSpace.h:12
static std::unique_ptr< Project > fromBytes(const char *bytes, size_t size)
Definition Project.cpp:155
Project(std::string name, std::unique_ptr< ProjectSpace > space, std::unique_ptr< PatternsContainer > patterns, std::unique_ptr< ParametersContainer > parameters, std::unique_ptr< OptionsContainer > options, std::unique_ptr< ExpressionsContainer > expressions, std::unique_ptr< InstructionsContainer > instructions)
Definition Project.cpp:94
void onExecuted(const std::function< void()> &function)
Definition Project.cpp:199
void setName(const std::string &name)
Definition Project.cpp:211
ParametersContainer * getParameters() const
Definition Project.cpp:227
InstructionsContainer * getInstructions() const
Definition Project.cpp:235
static std::unique_ptr< Project > read(const std::string &filePath)
Definition Project.cpp:169
static constexpr auto PROJECT_NAME_FILTER
Definition Project.h:19
ExpressionsContainer * getExpressions() const
Definition Project.cpp:231
static void write(const std::string &filePath, const Project &project)
Definition Project.cpp:183
ProjectSpace * getSpace() const
Definition Project.cpp:215
~Project()
Definition Project.cpp:122
void execute()
Definition Project.cpp:194
OptionsContainer * getOptions() const
Definition Project.cpp:219
std::vector< char > bytes() const
Definition Project.cpp:146
std::string getName()
Definition Project.cpp:207
PatternsContainer * getPatterns() const
Definition Project.cpp:223
static constexpr auto PROJECT_FILE_SUFFIX
Definition Project.h:18
static std::unique_ptr< Project > create()
Definition Project.cpp:129
Definition Argument.h:9
NamedElementsContainer< Pattern > PatternsContainer
Definition Pattern.h:22
ScopedNamedElementsContainer< Expression > ExpressionsContainer
Definition Expression.h:23
ScopedNamedElementsContainer< Option > OptionsContainer
Definition Option.h:27
BaseInstructionsContainer< BaseInstruction > InstructionsContainer
Definition BaseInstructionsContainer.h:69
NamedElementsContainer< Parameter > ParametersContainer
Definition Parameter.h:32
#define PROVIDE_SERIALIZATION_ACCESS(Class)
Definition serialization.h:29
#define SERIALIZE_CONSTRUCTION(Class,...)
Definition serialization.h:119