wip: use std::format for zcg templates

This commit is contained in:
Jan 2025-04-21 10:38:55 +02:00
parent 02b2c93e30
commit 6bbc3fa37e
No known key found for this signature in database
GPG Key ID: 44B581F78FF5C57C
7 changed files with 274 additions and 263 deletions

View File

@ -56,8 +56,8 @@ namespace
void CreateFromString(const std::string& templateString) void CreateFromString(const std::string& templateString)
{ {
const auto templateStringLength = templateString.size(); const auto templateStringLength = templateString.size();
auto partStart = 0u; auto partStart = 0uz;
for (auto i = 0u; i < templateStringLength; i++) for (auto i = 0uz; i < templateStringLength; i++)
{ {
if (templateString[i] != '?') if (templateString[i] != '?')
continue; continue;

View File

@ -245,7 +245,7 @@ void UnlinkerArgs::AddSpecifiedAssetType(std::string value)
void UnlinkerArgs::ParseCommaSeparatedAssetTypeString(const std::string& input) void UnlinkerArgs::ParseCommaSeparatedAssetTypeString(const std::string& input)
{ {
auto currentPos = 0u; auto currentPos = 0uz;
size_t endPos; size_t endPos;
std::string lowerInput(input); std::string lowerInput(input);

View File

@ -74,7 +74,7 @@ void BaseTemplate::MakeTypeWrittenPtrVarNameInternal(const DataDefinition* def,
void BaseTemplate::MakeArrayIndicesInternal(const DeclarationModifierComputations& modifierComputations, std::ostringstream& str) void BaseTemplate::MakeArrayIndicesInternal(const DeclarationModifierComputations& modifierComputations, std::ostringstream& str)
{ {
for (auto index : modifierComputations.GetArrayIndices()) for (const auto index : modifierComputations.GetArrayIndices())
{ {
str << "[" << index << "]"; str << "[" << index << "]";
} }
@ -115,7 +115,7 @@ std::string BaseTemplate::MakeSafeTypeName(const DataDefinition* def)
return str.str(); return str.str();
} }
std::string BaseTemplate::MakeMemberAccess(StructureInformation* info, MemberInformation* member, const DeclarationModifierComputations& modifier) std::string BaseTemplate::MakeMemberAccess(const StructureInformation* info, const MemberInformation* member, const DeclarationModifierComputations& modifier)
{ {
std::ostringstream str; std::ostringstream str;
MakeTypeVarNameInternal(info->m_definition, str); MakeTypeVarNameInternal(info->m_definition, str);
@ -125,7 +125,8 @@ std::string BaseTemplate::MakeMemberAccess(StructureInformation* info, MemberInf
return str.str(); return str.str();
} }
std::string BaseTemplate::MakeWrittenMemberAccess(StructureInformation* info, MemberInformation* member, const DeclarationModifierComputations& modifier) std::string
BaseTemplate::MakeWrittenMemberAccess(const StructureInformation* info, const MemberInformation* member, const DeclarationModifierComputations& modifier)
{ {
std::ostringstream str; std::ostringstream str;
MakeTypeWrittenVarNameInternal(info->m_definition, str); MakeTypeWrittenVarNameInternal(info->m_definition, str);
@ -137,7 +138,7 @@ std::string BaseTemplate::MakeWrittenMemberAccess(StructureInformation* info, Me
std::string BaseTemplate::MakeMemberAccess(const std::string& variableName, std::string BaseTemplate::MakeMemberAccess(const std::string& variableName,
StructureInformation* info, StructureInformation* info,
MemberInformation* member, const MemberInformation* member,
const DeclarationModifierComputations& modifier) const DeclarationModifierComputations& modifier)
{ {
std::ostringstream str; std::ostringstream str;
@ -185,13 +186,13 @@ std::string BaseTemplate::MakeArrayIndices(const DeclarationModifierComputations
return str.str(); return str.str();
} }
std::string BaseTemplate::MakeCustomActionCall(CustomAction* action) std::string BaseTemplate::MakeCustomActionCall(const CustomAction* action)
{ {
std::ostringstream str; std::ostringstream str;
str << "m_actions." << action->m_action_name << "("; str << "m_actions." << action->m_action_name << "(";
auto first = true; auto first = true;
for (auto* def : action->m_parameter_types) for (const auto* def : action->m_parameter_types)
{ {
if (first) if (first)
{ {

View File

@ -7,13 +7,13 @@
#include "Domain/Evaluation/Operation.h" #include "Domain/Evaluation/Operation.h"
#include "Generating/RenderingContext.h" #include "Generating/RenderingContext.h"
#include <format>
#include <ostream> #include <ostream>
#include <sstream>
class BaseTemplate class BaseTemplate
{ {
protected: protected:
static constexpr const char* INTENDATION = " "; static constexpr auto INTENDATION = " ";
BaseTemplate(std::ostream& stream, RenderingContext* context); BaseTemplate(std::ostream& stream, RenderingContext* context);
@ -26,16 +26,17 @@ protected:
static std::string MakeTypePtrVarName(const DataDefinition* def); static std::string MakeTypePtrVarName(const DataDefinition* def);
static std::string MakeTypeWrittenPtrVarName(const DataDefinition* def); static std::string MakeTypeWrittenPtrVarName(const DataDefinition* def);
static std::string MakeSafeTypeName(const DataDefinition* def); static std::string MakeSafeTypeName(const DataDefinition* def);
static std::string MakeMemberAccess(StructureInformation* info, MemberInformation* member, const DeclarationModifierComputations& modifier); static std::string MakeMemberAccess(const StructureInformation* info, const MemberInformation* member, const DeclarationModifierComputations& modifier);
static std::string MakeWrittenMemberAccess(StructureInformation* info, MemberInformation* member, const DeclarationModifierComputations& modifier); static std::string
MakeWrittenMemberAccess(const StructureInformation* info, const MemberInformation* member, const DeclarationModifierComputations& modifier);
static std::string MakeMemberAccess(const std::string& variableName, static std::string MakeMemberAccess(const std::string& variableName,
StructureInformation* info, StructureInformation* info,
MemberInformation* member, const MemberInformation* member,
const DeclarationModifierComputations& modifier); const DeclarationModifierComputations& modifier);
static std::string MakeTypeDecl(const TypeDeclaration* decl); static std::string MakeTypeDecl(const TypeDeclaration* decl);
static std::string MakeFollowingReferences(const std::vector<DeclarationModifier*>& modifiers); static std::string MakeFollowingReferences(const std::vector<DeclarationModifier*>& modifiers);
static std::string MakeArrayIndices(const DeclarationModifierComputations& modifierComputations); static std::string MakeArrayIndices(const DeclarationModifierComputations& modifierComputations);
static std::string MakeCustomActionCall(CustomAction* action); static std::string MakeCustomActionCall(const CustomAction* action);
static std::string MakeArrayCount(const ArrayDeclarationModifier* arrayModifier); static std::string MakeArrayCount(const ArrayDeclarationModifier* arrayModifier);
static std::string MakeEvaluation(const IEvaluation* evaluation); static std::string MakeEvaluation(const IEvaluation* evaluation);
@ -61,16 +62,34 @@ private:
DoIntendation(); \ DoIntendation(); \
m_out << x << "\n"; \ m_out << x << "\n"; \
} }
#define LINEF(...) \
{ \
DoIntendation(); \
m_out << std::format(__VA_ARGS__) << "\n"; \
}
#define LINE_START(x) \ #define LINE_START(x) \
{ \ { \
DoIntendation(); \ DoIntendation(); \
m_out << x; \ m_out << x; \
} }
#define LINE_STARTF(...) \
{ \
DoIntendation(); \
m_out << std::format(__VA_ARGS__); \
}
#define LINE_MIDDLE(x) \ #define LINE_MIDDLE(x) \
{ \ { \
m_out << x; \ m_out << x; \
} }
#define LINE_MIDDLEF(...) \
{ \
m_out << std::format(__VA_ARGS__); \
}
#define LINE_END(x) \ #define LINE_END(x) \
{ \ { \
m_out << x << "\n"; \ m_out << x << "\n"; \
} }
#define LINE_ENDF(...) \
{ \
m_out << std::format(__VA_ARGS__) << "\n"; \
}

View File

@ -1,4 +1,5 @@
#pragma once #pragma once
#include "Game/IW4/IW4.h" #include "Game/IW4/IW4.h"
#include "Loading/ContentLoaderBase.h" #include "Loading/ContentLoaderBase.h"
#include "Loading/IContentLoadingEntryPoint.h" #include "Loading/IContentLoadingEntryPoint.h"
@ -7,17 +8,18 @@ namespace IW4
{ {
class ContentLoader final : public ContentLoaderBase, public IContentLoadingEntryPoint class ContentLoader final : public ContentLoaderBase, public IContentLoadingEntryPoint
{ {
XAsset* varXAsset; public:
ScriptStringList* varScriptStringList; ContentLoader();
void Load(Zone* zone, IZoneInputStream* stream) override;
private:
void LoadScriptStringList(bool atStreamStart); void LoadScriptStringList(bool atStreamStart);
void LoadXAsset(bool atStreamStart) const; void LoadXAsset(bool atStreamStart) const;
void LoadXAssetArray(bool atStreamStart, size_t count); void LoadXAssetArray(bool atStreamStart, size_t count);
public: XAsset* varXAsset;
ContentLoader(); ScriptStringList* varScriptStringList;
void Load(Zone* zone, IZoneInputStream* stream) override;
}; };
} // namespace IW4 } // namespace IW4

View File

@ -25,7 +25,7 @@ public:
LoadDataInBlock(const_cast<void*>(reinterpret_cast<const void*>(dst)), sizeof(T)); LoadDataInBlock(const_cast<void*>(reinterpret_cast<const void*>(dst)), sizeof(T));
} }
template<typename T> void Load(T* dst, const uint32_t count) template<typename T> void Load(T* dst, const size_t count)
{ {
LoadDataInBlock(const_cast<void*>(reinterpret_cast<const void*>(dst)), count * sizeof(T)); LoadDataInBlock(const_cast<void*>(reinterpret_cast<const void*>(dst)), count * sizeof(T));
} }