Move AbstractScopeSequenceHolder to Parse and make it a template class to be reusable

This commit is contained in:
Jan 2022-01-18 22:55:25 +01:00
parent 0aad5a42cb
commit 91cfb2e8dd
15 changed files with 61 additions and 68 deletions

View File

@ -1,15 +0,0 @@
#include "AbstractScopeSequenceHolder.h"
using namespace menu;
AbstractScopeSequenceHolder::AbstractScopeSequenceHolder(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences)
: m_all_sequences(allSequences),
m_scope_sequences(scopeSequences)
{
}
void AbstractScopeSequenceHolder::AddSequence(std::unique_ptr<MenuFileParser::sequence_t> test) const
{
m_scope_sequences.push_back(test.get());
m_all_sequences.emplace_back(std::move(test));
}

View File

@ -1,29 +0,0 @@
#pragma once
#include <memory>
#include <vector>
#include "Parsing/Menu/MenuFileParser.h"
namespace menu
{
class AbstractScopeSequenceHolder
{
std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& m_all_sequences;
std::vector<MenuFileParser::sequence_t*>& m_scope_sequences;
protected:
AbstractScopeSequenceHolder(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
void AddSequence(std::unique_ptr<MenuFileParser::sequence_t> test) const;
public:
virtual ~AbstractScopeSequenceHolder() = default;
AbstractScopeSequenceHolder(const AbstractScopeSequenceHolder& other) = delete;
AbstractScopeSequenceHolder(AbstractScopeSequenceHolder&& other) noexcept = default;
AbstractScopeSequenceHolder& operator=(const AbstractScopeSequenceHolder& other) = delete;
AbstractScopeSequenceHolder& operator=(AbstractScopeSequenceHolder&& other) noexcept = delete;
virtual void AddSequences(FeatureLevel featureLevel, bool permissive) = 0;
};
}

View File

@ -752,7 +752,7 @@ EventHandlerSetScopeSequences::EventHandlerSetScopeSequences(std::vector<std::un
{ {
} }
void EventHandlerSetScopeSequences::AddSequences(FeatureLevel featureLevel, bool permissive) void EventHandlerSetScopeSequences::AddSequences(const FeatureLevel featureLevel, const bool permissive) const
{ {
AddSequence(std::make_unique<SequenceSkipEmptyStatements>()); AddSequence(std::make_unique<SequenceSkipEmptyStatements>());
// If else and stuff // If else and stuff

View File

@ -1,14 +1,15 @@
#pragma once #pragma once
#include "AbstractScopeSequenceHolder.h" #include "Parsing/Menu/MenuFileParser.h"
#include "Parsing/Sequence/AbstractScopeSequenceHolder.h"
namespace menu namespace menu
{ {
class EventHandlerSetScopeSequences final : AbstractScopeSequenceHolder class EventHandlerSetScopeSequences final : AbstractScopeSequenceHolder<MenuFileParser>
{ {
public: public:
EventHandlerSetScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences); EventHandlerSetScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
void AddSequences(FeatureLevel featureLevel, bool permissive) override; void AddSequences(FeatureLevel featureLevel, bool permissive) const;
}; };
} }

View File

@ -72,7 +72,7 @@ FunctionScopeSequences::FunctionScopeSequences(std::vector<std::unique_ptr<MenuF
{ {
} }
void FunctionScopeSequences::AddSequences(FeatureLevel featureLevel, bool permissive) void FunctionScopeSequences::AddSequences(FeatureLevel featureLevel, bool permissive) const
{ {
AddSequence(std::make_unique<SequenceCloseBlock>()); AddSequence(std::make_unique<SequenceCloseBlock>());
AddSequence(std::make_unique<GenericStringPropertySequence>("name", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) AddSequence(std::make_unique<GenericStringPropertySequence>("name", [](const MenuFileParserState* state, const TokenPos&, const std::string& value)

View File

@ -1,14 +1,15 @@
#pragma once #pragma once
#include "AbstractScopeSequenceHolder.h" #include "Parsing/Menu/MenuFileParser.h"
#include "Parsing/Sequence/AbstractScopeSequenceHolder.h"
namespace menu namespace menu
{ {
class FunctionScopeSequences final : AbstractScopeSequenceHolder class FunctionScopeSequences final : AbstractScopeSequenceHolder<MenuFileParser>
{ {
public: public:
FunctionScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences); FunctionScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
void AddSequences(FeatureLevel featureLevel, bool permissive) override; void AddSequences(FeatureLevel featureLevel, bool permissive) const;
}; };
} }

View File

@ -107,7 +107,7 @@ GlobalScopeSequences::GlobalScopeSequences(std::vector<std::unique_ptr<MenuFileP
{ {
} }
void GlobalScopeSequences::AddSequences(FeatureLevel featureLevel, bool permissive) void GlobalScopeSequences::AddSequences(FeatureLevel featureLevel, bool permissive) const
{ {
AddSequence(std::make_unique<SequenceCloseBlock>()); AddSequence(std::make_unique<SequenceCloseBlock>());
AddSequence(std::make_unique<SequenceFunctionDef>()); AddSequence(std::make_unique<SequenceFunctionDef>());

View File

@ -1,14 +1,15 @@
#pragma once #pragma once
#include "AbstractScopeSequenceHolder.h" #include "Parsing/Menu/MenuFileParser.h"
#include "Parsing/Sequence/AbstractScopeSequenceHolder.h"
namespace menu namespace menu
{ {
class GlobalScopeSequences final : AbstractScopeSequenceHolder class GlobalScopeSequences final : AbstractScopeSequenceHolder<MenuFileParser>
{ {
public: public:
GlobalScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences); GlobalScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
void AddSequences(FeatureLevel featureLevel, bool permissive) override; void AddSequences(FeatureLevel featureLevel, bool permissive) const;
}; };
} }

View File

@ -555,7 +555,7 @@ ItemScopeSequences::ItemScopeSequences(std::vector<std::unique_ptr<MenuFileParse
{ {
} }
void ItemScopeSequences::AddSequences(FeatureLevel featureLevel, bool permissive) void ItemScopeSequences::AddSequences(FeatureLevel featureLevel, bool permissive) const
{ {
AddSequence(std::make_unique<SequenceCloseBlock>()); AddSequence(std::make_unique<SequenceCloseBlock>());
AddSequence(std::make_unique<GenericStringPropertySequence>("name", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) AddSequence(std::make_unique<GenericStringPropertySequence>("name", [](const MenuFileParserState* state, const TokenPos&, const std::string& value)

View File

@ -1,14 +1,15 @@
#pragma once #pragma once
#include "AbstractScopeSequenceHolder.h" #include "Parsing/Menu/MenuFileParser.h"
#include "Parsing/Sequence/AbstractScopeSequenceHolder.h"
namespace menu namespace menu
{ {
class ItemScopeSequences final : AbstractScopeSequenceHolder class ItemScopeSequences final : AbstractScopeSequenceHolder<MenuFileParser>
{ {
public: public:
ItemScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences); ItemScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
void AddSequences(FeatureLevel featureLevel, bool permissive) override; void AddSequences(FeatureLevel featureLevel, bool permissive) const;
}; };
} }

View File

@ -225,7 +225,7 @@ MenuScopeSequences::MenuScopeSequences(std::vector<std::unique_ptr<MenuFileParse
{ {
} }
void MenuScopeSequences::AddSequences(FeatureLevel featureLevel, bool permissive) void MenuScopeSequences::AddSequences(FeatureLevel featureLevel, bool permissive) const
{ {
AddSequence(std::make_unique<SequenceCloseBlock>()); AddSequence(std::make_unique<SequenceCloseBlock>());
AddSequence(std::make_unique<SequenceItemDef>()); AddSequence(std::make_unique<SequenceItemDef>());

View File

@ -1,14 +1,15 @@
#pragma once #pragma once
#include "AbstractScopeSequenceHolder.h" #include "Parsing/Menu/MenuFileParser.h"
#include "Parsing/Sequence/AbstractScopeSequenceHolder.h"
namespace menu namespace menu
{ {
class MenuScopeSequences final : AbstractScopeSequenceHolder class MenuScopeSequences final : AbstractScopeSequenceHolder<MenuFileParser>
{ {
public: public:
MenuScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences); MenuScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
void AddSequences(FeatureLevel featureLevel, bool permissive) override; void AddSequences(FeatureLevel featureLevel, bool permissive) const;
}; };
} }

View File

@ -34,7 +34,7 @@ NoScopeSequences::NoScopeSequences(std::vector<std::unique_ptr<MenuFileParser::s
{ {
} }
void NoScopeSequences::AddSequences(FeatureLevel featureLevel, bool permissive) void NoScopeSequences::AddSequences(FeatureLevel featureLevel, bool permissive) const
{ {
AddSequence(std::make_unique<SequenceOpenGlobalScope>()); AddSequence(std::make_unique<SequenceOpenGlobalScope>());
} }

View File

@ -1,14 +1,15 @@
#pragma once #pragma once
#include "AbstractScopeSequenceHolder.h" #include "Parsing/Menu/MenuFileParser.h"
#include "Parsing/Sequence/AbstractScopeSequenceHolder.h"
namespace menu namespace menu
{ {
class NoScopeSequences final : AbstractScopeSequenceHolder class NoScopeSequences final : AbstractScopeSequenceHolder<MenuFileParser>
{ {
public: public:
NoScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences); NoScopeSequences(std::vector<std::unique_ptr<MenuFileParser::sequence_t>>& allSequences, std::vector<MenuFileParser::sequence_t*>& scopeSequences);
void AddSequences(FeatureLevel featureLevel, bool permissive) override; void AddSequences(FeatureLevel featureLevel, bool permissive) const;
}; };
} }

View File

@ -0,0 +1,31 @@
#pragma once
#include <memory>
#include <vector>
template <typename ParserType>
class AbstractScopeSequenceHolder
{
std::vector<std::unique_ptr<typename ParserType::sequence_t>>& m_all_sequences;
std::vector<typename ParserType::sequence_t*>& m_scope_sequences;
protected:
AbstractScopeSequenceHolder(std::vector<std::unique_ptr<typename ParserType::sequence_t>>& allSequences, std::vector<typename ParserType::sequence_t*>& scopeSequences)
: m_all_sequences(allSequences),
m_scope_sequences(scopeSequences)
{
}
void AddSequence(std::unique_ptr<typename ParserType::sequence_t> test) const
{
m_scope_sequences.push_back(test.get());
m_all_sequences.emplace_back(std::move(test));
}
public:
virtual ~AbstractScopeSequenceHolder() = default;
AbstractScopeSequenceHolder(const AbstractScopeSequenceHolder& other) = delete;
AbstractScopeSequenceHolder(AbstractScopeSequenceHolder&& other) noexcept = default;
AbstractScopeSequenceHolder& operator=(const AbstractScopeSequenceHolder& other) = delete;
AbstractScopeSequenceHolder& operator=(AbstractScopeSequenceHolder&& other) noexcept = delete;
};