basic node builders

This commit is contained in:
ProgramSnail 2023-07-20 14:38:44 +03:00
parent 1b28f41810
commit 696a9c3a1a
11 changed files with 442 additions and 37 deletions

View file

@ -13,14 +13,19 @@ class Expression;
class ExpressionStorage;
class ExpressionProxy {
friend ExpressionStorage;
public:
ExpressionProxy(ExpressionStorage &expression_storage, size_t id)
: expression_storage_(expression_storage), id_(id) {}
ExpressionProxy() = delete;
Expression *get();
const Expression *get() const;
private:
ExpressionProxy(ExpressionStorage &expression_storage, size_t id)
: expression_storage_(expression_storage), id_(id) {}
private:
ExpressionStorage &expression_storage_;
size_t id_;
@ -551,13 +556,13 @@ class ExpressionStorage {
friend ExpressionProxy;
public:
ExpressionProxy add_expression(const Expression &type) {
storage_.push_back(type);
ExpressionProxy add_expression(const Expression &expression) {
storage_.push_back(expression);
return ExpressionProxy(*this, storage_.size() - 1);
}
ExpressionProxy add_expression(Expression &&type) {
storage_.push_back(std::move(type));
ExpressionProxy add_expression(Expression &&expression) {
storage_.push_back(std::move(expression));
return ExpressionProxy(*this, storage_.size() - 1);
}