mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-06-10 23:08:05 -05:00
Extract commonly used Parser code to new Parser component
This commit is contained in:
35
src/Parser/Parsing/Impl/PackDefinitionStreamProxy.h
Normal file
35
src/Parser/Parsing/Impl/PackDefinitionStreamProxy.h
Normal file
@ -0,0 +1,35 @@
|
||||
#pragma once
|
||||
|
||||
#include <stack>
|
||||
|
||||
#include "AbstractDirectiveStreamProxy.h"
|
||||
#include "Parsing/IPackValueSupplier.h"
|
||||
#include "Parsing/IParserLineStream.h"
|
||||
|
||||
class PackDefinitionStreamProxy final : public AbstractDirectiveStreamProxy, public IPackValueSupplier
|
||||
{
|
||||
public:
|
||||
static constexpr int DEFAULT_PACK = 8;
|
||||
|
||||
private:
|
||||
static constexpr const char* PRAGMA_PACK_DIRECTIVE = "pragma pack";
|
||||
static constexpr const char* PUSH_KEYWORD = "push";
|
||||
static constexpr const char* POP_KEYWORD = "pop";
|
||||
|
||||
IParserLineStream* const m_stream;
|
||||
std::stack<int> m_current_pack;
|
||||
|
||||
_NODISCARD bool MatchPackDirective(const ParserLine& line, unsigned directivePosition);
|
||||
_NODISCARD bool MatchDirectives(const ParserLine& line);
|
||||
|
||||
public:
|
||||
explicit PackDefinitionStreamProxy(IParserLineStream* stream);
|
||||
|
||||
ParserLine NextLine() override;
|
||||
bool IncludeFile(const std::string& filename) override;
|
||||
void PopCurrentFile() override;
|
||||
_NODISCARD bool IsOpen() const override;
|
||||
_NODISCARD bool Eof() const override;
|
||||
|
||||
int GetCurrentPack() const override;
|
||||
};
|
Reference in New Issue
Block a user