chore: add ability for zcg to generate files once per template

This commit is contained in:
Jan Laupetin
2026-01-05 17:43:56 +00:00
parent 11fdb4ad59
commit 660f34df69
17 changed files with 166 additions and 53 deletions
@@ -14,7 +14,7 @@ namespace
class Template final : BaseTemplate
{
public:
Template(std::ostream& stream, const RenderingContext& context)
Template(std::ostream& stream, const OncePerAssetRenderingContext& context)
: BaseTemplate(stream, context)
{
}
@@ -81,7 +81,7 @@ namespace
};
} // namespace
std::vector<CodeTemplateFile> AssetStructTestsTemplate::GetFilesToRender(const RenderingContext& context)
std::vector<CodeTemplateFile> AssetStructTestsTemplate::GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context)
{
std::vector<CodeTemplateFile> files;
@@ -93,7 +93,7 @@ std::vector<CodeTemplateFile> AssetStructTestsTemplate::GetFilesToRender(const R
return files;
}
void AssetStructTestsTemplate::RenderFile(std::ostream& stream, const int fileTag, const RenderingContext& context)
void AssetStructTestsTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context)
{
Template t(stream, context);
@@ -1,9 +1,10 @@
#pragma once
#include "Generating/ICodeTemplate.h"
class AssetStructTestsTemplate final : public ICodeTemplate
{
public:
std::vector<CodeTemplateFile> GetFilesToRender(const RenderingContext& context) override;
void RenderFile(std::ostream& stream, int fileTag, const RenderingContext& context) override;
std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context) override;
void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context) override;
};
@@ -5,7 +5,7 @@
#include <sstream>
BaseTemplate::BaseTemplate(std::ostream& stream, const RenderingContext& context)
BaseTemplate::BaseTemplate(std::ostream& stream, const OncePerAssetRenderingContext& context)
: m_out(stream),
m_env(context),
m_intendation(0u)
@@ -5,7 +5,7 @@
#include "Domain/Evaluation/OperandDynamic.h"
#include "Domain/Evaluation/OperandStatic.h"
#include "Domain/Evaluation/Operation.h"
#include "Generating/RenderingContext.h"
#include "Generating/OncePerAssetRenderingContext.h"
#include <format>
#include <ostream>
@@ -15,7 +15,7 @@ class BaseTemplate
protected:
static constexpr auto INTENDATION = " ";
BaseTemplate(std::ostream& stream, const RenderingContext& context);
BaseTemplate(std::ostream& stream, const OncePerAssetRenderingContext& context);
void DoIntendation() const;
@@ -37,7 +37,7 @@ protected:
static std::string MakeEvaluation(const IEvaluation* evaluation);
std::ostream& m_out;
const RenderingContext& m_env;
const OncePerAssetRenderingContext& m_env;
unsigned m_intendation;
private:
@@ -17,7 +17,7 @@ namespace
class Template final : BaseTemplate
{
public:
Template(std::ostream& stream, const RenderingContext& context)
Template(std::ostream& stream, const OncePerAssetRenderingContext& context)
: BaseTemplate(stream, context)
{
}
@@ -2198,7 +2198,7 @@ namespace
};
} // namespace
std::vector<CodeTemplateFile> ZoneLoadTemplate::GetFilesToRender(const RenderingContext& context)
std::vector<CodeTemplateFile> ZoneLoadTemplate::GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context)
{
std::vector<CodeTemplateFile> files;
@@ -2211,7 +2211,7 @@ std::vector<CodeTemplateFile> ZoneLoadTemplate::GetFilesToRender(const Rendering
return files;
}
void ZoneLoadTemplate::RenderFile(std::ostream& stream, const int fileTag, const RenderingContext& context)
void ZoneLoadTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context)
{
Template t(stream, context);
@@ -1,9 +1,10 @@
#pragma once
#include "Generating/ICodeTemplate.h"
class ZoneLoadTemplate final : public ICodeTemplate
{
public:
std::vector<CodeTemplateFile> GetFilesToRender(const RenderingContext& context) override;
void RenderFile(std::ostream& stream, int fileTag, const RenderingContext& context) override;
std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context) override;
void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context) override;
};
@@ -16,7 +16,7 @@ namespace
class Template final : BaseTemplate
{
public:
Template(std::ostream& stream, const RenderingContext& context)
Template(std::ostream& stream, const OncePerAssetRenderingContext& context)
: BaseTemplate(stream, context)
{
}
@@ -764,7 +764,7 @@ namespace
};
} // namespace
std::vector<CodeTemplateFile> ZoneMarkTemplate::GetFilesToRender(const RenderingContext& context)
std::vector<CodeTemplateFile> ZoneMarkTemplate::GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context)
{
std::vector<CodeTemplateFile> files;
@@ -777,7 +777,7 @@ std::vector<CodeTemplateFile> ZoneMarkTemplate::GetFilesToRender(const Rendering
return files;
}
void ZoneMarkTemplate::RenderFile(std::ostream& stream, const int fileTag, const RenderingContext& context)
void ZoneMarkTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context)
{
Template t(stream, context);
@@ -1,9 +1,10 @@
#pragma once
#include "Generating/ICodeTemplate.h"
class ZoneMarkTemplate final : public ICodeTemplate
{
public:
std::vector<CodeTemplateFile> GetFilesToRender(const RenderingContext& context) override;
void RenderFile(std::ostream& stream, int fileTag, const RenderingContext& context) override;
std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context) override;
void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context) override;
};
@@ -9,13 +9,13 @@
namespace
{
constexpr int TAG_HEADER = 1;
constexpr int TAG_SOURCE = 2;
constexpr CodeTemplateFileTag TAG_HEADER = 1;
constexpr CodeTemplateFileTag TAG_SOURCE = 2;
class Template final : BaseTemplate
{
public:
Template(std::ostream& stream, const RenderingContext& context)
Template(std::ostream& stream, const OncePerAssetRenderingContext& context)
: BaseTemplate(stream, context)
{
}
@@ -1233,7 +1233,7 @@ namespace
};
} // namespace
std::vector<CodeTemplateFile> ZoneWriteTemplate::GetFilesToRender(const RenderingContext& context)
std::vector<CodeTemplateFile> ZoneWriteTemplate::GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context)
{
std::vector<CodeTemplateFile> files;
@@ -1247,7 +1247,7 @@ std::vector<CodeTemplateFile> ZoneWriteTemplate::GetFilesToRender(const Renderin
return files;
}
void ZoneWriteTemplate::RenderFile(std::ostream& stream, const int fileTag, const RenderingContext& context)
void ZoneWriteTemplate::RenderOncePerAssetFile(std::ostream& stream, const CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context)
{
Template t(stream, context);
@@ -1,9 +1,10 @@
#pragma once
#include "Generating/ICodeTemplate.h"
class ZoneWriteTemplate final : public ICodeTemplate
{
public:
std::vector<CodeTemplateFile> GetFilesToRender(const RenderingContext& context) override;
void RenderFile(std::ostream& stream, int fileTag, const RenderingContext& context) override;
std::vector<CodeTemplateFile> GetFilesToRenderOncePerAsset(const OncePerAssetRenderingContext& context) override;
void RenderOncePerAssetFile(std::ostream& stream, CodeTemplateFileTag fileTag, const OncePerAssetRenderingContext& context) override;
};