// 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