1#ifndef CHRYSALIS_PROJECT_H
2#define CHRYSALIS_PROJECT_H
5#include <condition_variable>
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);
27 static std::unique_ptr<Project>
create();
28 static std::unique_ptr<Project>
create(
const std::string& name);
30 std::vector<char>
bytes()
const;
31 static std::unique_ptr<Project>
fromBytes(
const char*
bytes,
size_t size);
33 static std::unique_ptr<Project>
read(
const std::string& filePath);
34 static void write(
const std::string& filePath,
const Project& project);
37 void setName(
const std::string& name);
40 void onExecuted(
const std::function<
void()>& function);
50 std::condition_variable startExecution_;
51 std::atomic<bool> pendingExecution_ =
false;
53 std::queue<std::function<void()>> queue_;
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_;
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
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