2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2025-06-26 22:31:50 +00:00

Add stream proxy for declaring pack values

This commit is contained in:
Jan
2021-02-14 10:27:18 +01:00
parent efa39a8ac3
commit 3f08be0564
6 changed files with 188 additions and 1 deletions

View 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() override;
};