// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved. #pragma once #include "Engine/Core/Collections/Array.h" #include "ITokenReader.h" #if COMPILE_WITH_SHADER_COMPILER namespace ShaderProcessing { /// /// Interface for objects that can have child token readers /// template class ITokenReadersContainerBase { protected: Array _childReaders; public: /// /// Virtual destructor /// virtual ~ITokenReadersContainerBase() { // Cleanup _childReaders.ClearDelete(); } protected: /// /// Try to process given token by any child reader /// /// Starting token to check /// Parser object /// True if no token processing has been done, otherwise false virtual bool ProcessChildren(const Token& token, IShaderParser* parser) { for (int32 i = 0; i < _childReaders.Count(); i++) { if (_childReaders[i]->CheckStartToken(token)) { _childReaders[i]->Process(parser, parser->GetReader()); return false; } } return true; } }; /// /// Interface for objects that can have child ITokenReader objects /// class ITokenReadersContainer : public ITokenReadersContainerBase { public: /// /// Virtual destructor /// virtual ~ITokenReadersContainer() { // Cleanup _childReaders.ClearDelete(); } }; } #endif