// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - Shader generator" // For conditions of distribution and use, see copyright notice in Config.hpp #include #include namespace Nz { template void ShaderAstSerializerBase::Container(T& container) { bool isWriting = IsWriting(); UInt32 size; if (isWriting) size = UInt32(container.size()); Value(size); if (!isWriting) container.resize(size); } template void ShaderAstSerializerBase::Enum(T& enumVal) { bool isWriting = IsWriting(); UInt32 value; if (isWriting) value = static_cast(enumVal); Value(value); if (!isWriting) enumVal = static_cast(value); } template void ShaderAstSerializerBase::OptEnum(std::optional& optVal) { bool isWriting = IsWriting(); bool hasValue; if (isWriting) hasValue = optVal.has_value(); Value(hasValue); if (!isWriting && hasValue) optVal.emplace(); if (optVal.has_value()) Enum(optVal.value()); } template void ShaderAstSerializerBase::OptVal(std::optional& optVal) { bool isWriting = IsWriting(); bool hasValue; if (isWriting) hasValue = optVal.has_value(); Value(hasValue); if (!isWriting && hasValue) optVal.emplace(); if (optVal.has_value()) { if constexpr (std::is_same_v) SizeT(optVal.value()); else Value(optVal.value()); } } template void ShaderAstSerializerBase::Node(std::shared_ptr& node) { bool isWriting = IsWriting(); ShaderNodes::NodePtr value; if (isWriting) value = node; Node(value); if (!isWriting) node = std::static_pointer_cast(value); } inline void ShaderAstSerializerBase::SizeT(std::size_t& val) { bool isWriting = IsWriting(); UInt32 fixedVal; if (isWriting) fixedVal = static_cast(val); Value(fixedVal); if (!isWriting) val = static_cast(fixedVal); } template void ShaderAstSerializerBase::Variable(std::shared_ptr& var) { bool isWriting = IsWriting(); ShaderNodes::VariablePtr value; if (isWriting) value = var; Variable(value); if (!isWriting) var = std::static_pointer_cast(value); } inline ShaderAstSerializer::ShaderAstSerializer(ByteStream& stream) : m_stream(stream) { } inline ShaderAstUnserializer::ShaderAstUnserializer(ByteStream& stream) : m_stream(stream) { } } #include