Mon, 23 Sep 2019 14:06:36 +0300
added regular expressions for the parser
3 | 1 | #pragma once |
2 | #include <memory> | |
3 | #include "main.h" | |
4 | #include "header.h" | |
5 | #include "objecttypes/modelobject.h" | |
6 | ||
7 | class Model : public QObject | |
8 | { | |
9 | Q_OBJECT | |
10 | public: | |
11 | class EditContext; | |
12 | Model(); | |
13 | Model(const Model &) = delete; | |
14 | int size() const; | |
15 | EditContext edit(); | |
16 | private: | |
17 | template<typename T, typename... Args> | |
18 | T* append(Args&&... args); | |
19 | template<typename T, typename... Args> | |
20 | T* insert(int position, Args&&... args); | |
21 | bool modified = false; | |
22 | QString path; | |
23 | using ModelObjectPointer = std::unique_ptr<modelobjects::BaseObject>; | |
24 | LDHeader header; | |
25 | std::vector<ModelObjectPointer> body; | |
26 | }; | |
27 | ||
28 | template<typename T, typename... Args> | |
29 | T* Model::append(Args&&... args) | |
30 | { | |
31 | this->body.push_back(std::make_unique<T>(args...)); | |
32 | return static_cast<T*>(this->body.back().get()); | |
33 | } | |
34 | ||
35 | template<typename T, typename... Args> | |
36 | T* Model::insert(int position, Args&&... args) | |
37 | { | |
38 | this->body.insert(position, std::make_unique<T>(args...)); | |
39 | return this->body[position]; | |
40 | } |